Что такое «флаг функции»? - PullRequest
83 голосов
/ 10 октября 2011

Флаги функции упоминания о масштабируемости здесь:

http://www.iheavy.com/2011/08/26/5-things-are-toxic-to-scalability/

Что такое флаги функций?

Спасибо

Ответы [ 10 ]

81 голосов
/ 10 октября 2011

«Флажок функций» (или Переключение функций ) - это возможность легко включать / выключать функции (подразделы) вашего приложения:

  • возможно через повторное развертывание или
  • некоторая внутренняя страница, на которой можно переключать страницы / функции.

Полагаю, пример был в том, что удобно иметь элемент управления, чтобы немного уменьшить набор функций, если вам нужно, скажем, уменьшить количество запросов в БД, если нагрузка слишком высока.

Есть куча других причин , которые вы хотели бы использовать, хотя одна из основных - включение Непрерывная доставка : запуск вещей в производство / в прямом эфире, но с отключенной функцией / переключаться, пока не будет завершено. Мы часто используем то, что мы называем «cookie-файлом dev», чтобы показать незавершенные функции только команде разработчиков. Таким образом, мы можем протестировать частично завершенную работу в производственной среде (о, да! Есть ли лучшая интеграция?) В нескольких выпусках / развертываниях, прежде чем мы «отпустим» (завершим) ее, и она станет видимой для общественности.

Вот простой пакет, который поможет вам сделать это в ASP.NET MVC land: https://github.com/cottsak/DevCookie (полное раскрытие: я автор)

Фаулер также имеет гораздо более длинную статью, чем та, на которую ссылается выше, с гораздо более подробной информацией .

Этот пост (также на сайте Фаулера) объясняет различные типы стратегий переключения . DevCookie поддерживает основную / магистральную стратегию и в статье называется " Release Toggle ".

Ответ Адиля подчеркивает, что существует множество терминов и причин, по которым вам может понадобиться некоторая часть этой инфраструктуры. Имейте в виду, что вам могут понадобиться только некоторые из этих вещей. Например, я могу захотеть включить только простой и гибкий рабочий процесс развертывания / доставки, поэтому достаточно простой инфраструктуры. Если вы затем решите перейти к полному эксперименту # leanstartup с A / B, когортным тестированием и такими вещами, как контролируемое развертывание, вам следует рассмотреть инструмент аналитики (например, Heap ) что облегчает эти методологии разработки на основе данных как отдельное решение. Инфраструктура переключения, которая выполняет все вышеперечисленное, приведет к раздутию и ненужной сложности.

23 голосов
/ 23 июня 2012

Feature Flag - это метод, позволяющий отключить некоторые функции вашего приложения с помощью конфигурации без развертывания нового кода.

Флаги функций играют ключевую роль в схеме CI, где функции постоянно развертываются, но не обязательно «выпускаются» в производство.

Больше информации здесь:

- РЕДАКТИРОВАТЬ:

Флажки функций Java-реализация .

15 голосов
/ 26 августа 2016

Флаги функций, переключатели функций, эксперименты и управляемые развертывания являются синонимами простой, но мощной идеи: отдельный код развертывается из развертывания функций. Говоря откровенно, это способность подтолкнуть коммиты вашей функции к производству, при этом выбирая, кто из ваших клиентов - если кто-либо вообще - получит эту функцию.

Они были частично популяризированы Gatekeeper Facebook . LiX LinkedIn является еще одним хорошим примером.

Принятие этой простой идеи закладывает основу для многих передовых практик, в том числе:

Непрерывное развертывание / доставка - несколько кодов запускаются в производство за один день.

Разработка магистрали / магистрали - ветви функций должны создаваться только для запросов на извлечение, а не для разработки долгосрочных функций.

Больше не нужно выпускать поезда , чтобы затормозить.

QA / Perf Testing в производстве - реальное тестирование QA и производительности на производственной инфраструктуре с производственным трафиком. Не тратьте время на создание обширных лабораторий и постановочных сред.

Экспериментирование - узнайте, как новая функция перемещает иглу на ваших KPI.

Избегание исправлений или откатов кода при возникновении проблем - как исправления, так и откаты кода вызывают стресс, занимают много времени и приводят к большему количеству проблем, чем необходимо. Вместо этого отключите эту функцию или уменьшите ее.

Другие упоминали библиотеки с открытым исходным кодом. Хорошим примером полного решения, такого как Gatekeeper и LiX, является Split . Я работаю на Сплит.

8 голосов
/ 10 октября 2011

Флажок функции (также известный как переключение функций или переключение функций ) - это переключатель, позволяющий включать или отключать потенциально дорогостоящую функцию по мере необходимости (например, когда сайт забивается неожиданным трафиком),Это даст вам немного времени, пока вы не увеличите масштаб или пока шип нагрузки не исчезнет.

Вот пример из документации SWIG .

7 голосов
/ 09 марта 2018

Здесь есть много отличных ответов, все из которых основаны на важном, базовом определении, популяризированном в посте Martin Fowler :

Это кусочки кода, которые "[разрешить] командам изменять поведение системы без изменения кода. "

Таким образом, мы исторически думали о них как представленные псевдокодом:

if(app_settings["beta-mode"] == "true")
  showAwesomeNewGui();
else
  sameOldSnoozeFeset();

Это полностьюточный способ думать об этом, и Мэтт, и Адиль прекрасно расширяют его с помощью разнообразных тактических вариантов использования флага функции.

Но я хотел бы предложить пересмотренное определение, отражающее эволюцию реальности.через шесть лет и перемен с тех пор дотнетдев задал оригинальный вопрос.Я работаю для Rollout.io , платформы флагов функций, поэтому у меня есть место в первом ряду для этой эволюции.

Проще говоря, флаги функций уже не простоспособ включить и выключить функции в вашем приложении.Это все равно что ответить «что такое позиция счета-фактуры», сказав «это описание и количество валюты».Да, но это не влияет на более широкий смысл самого счета.

Флаги функций - это тактические биты всеобъемлющего стратегического решения в современном программном обеспечении.Это средство, с помощью которого вы откладываете важную логику принятия решений в своем коде до времени выполнения, когда у вас будет больше информации.И, возможно, самое главное, они больше не происходят изолированно, с единственной проверкой, чтобы увидеть, больше ли номер версии 2.7 или нет;организации, которые их используют, обычно включают их как часть комплексного, общесистемного подхода к продукту.

Как уже упоминали другие, Facebook и LinkedIn первыми это сделали, но в 2018 году это сделали многие организации.Они откладывают вопросы логики принятия решений на время выполнения как часть стратегии развития, операционной стратегии (или стратегии DevOps, если хотите) и стратегии продукта.Вот примеры таких вопросов.

  • Кто должен видеть новый экран администратора, который мы запускаем, и когда?
  • Какой уровень членства необходим для разблокировки этого пасхального яйца?
  • Когда мы должны перейти на новую базу данных?
  • Должны ли мы поместить изображение гепарда или орла на кнопку проверки, чтобы улучшить конверсию?

Чтобы иметь приложение, которое откладывает значительное количество таких решений до времени выполнения, вы не можете добавлять флаги функций в свое приложение в режиме ad-hoc, иначе у вас возникнут технические долги.В настоящее время вам необходима всеобъемлющая стратегия управления флагами объектов, которая включает в себя несколько различных компонентов.

  • Точки переключения используются для переключения поведения новых функций.
  • Несколько точек переключения объединяются в переключатель .Маршрутизатор-переключатель определяет состояние функции.
  • Контекст переключения предоставляет маршрутизатору-переключателю необходимую контекстную информацию (например, конкретного пользователя).
  • Настройка переключения предоставляет маршрутизатору информацию о среде.

Итак, в конце концов, что такое флаги функций?

Что ж, они являются важной частью более широкой стратегиииметь приложение, которое адаптируется как к техническим, так и к рыночным потребностям.

3 голосов
/ 23 января 2019

Флаги функций используются для нескольких целей.Общая идея состоит в том, чтобы делегировать контроль над тем, какой пользователь видит какую функцию, какой-либо удаленной информационной панели или бэк-офису.

После того, как функция помечена в коде, теперь вы можете использовать несколько методов, чтобы определить, какой пользователь видитэто в вашем приложении: 1. On / Off - показать функцию всем или никому из ваших пользователей.2. Постепенный выпуск - покажите эту функцию только проценту ваших пользователей, а затем постепенно покажите ее всем пользователям.3. Таргетинг - показать функцию конкретным пользователям на основе свойств или характеристик этого пользователя.

Инструменты, помогающие управлять флагами функций (логические значения) и конфигурациями функций (строки, числа и т. Д.)) обычно называются Платформы управления функциями Существует отличный сервис для управления функциями, который называется Configz.io

3 голосов
/ 14 июня 2018

Флажки функций (или переключатели функций) позволяют удаленно включать функции в приложении без необходимости перестраивать / повторно развертывать приложение. Это позволяет вам развертывать код в рабочей среде, но не выпускать эту функцию, пока вы не будете готовы. Вы можете настраивать таргетинг на конкретных пользователей, поэтому вы можете включить новую функцию для бета-тестирования пользователей.

В нашей компании мы ранее использовали LaunchDarkly и другие предложения от FeatureFlags.io . Мы также попытались использовать Удаленная конфигурация Firebase , чтобы попытаться выполнить эту работу, однако мы обнаружили, что она не подходит для этой цели.

В итоге мы разработали собственную версию Bullet Train , которую мы открыли. Он сочетает в себе флаги / переключатели функций и удаленную настройку.

1 голос
/ 21 октября 2015

Насколько я понимаю, флаги функций помогают вам управлять функциональностью, решая, какие пользователи получат определенные функции.

Например, допустим, вы хотите, чтобы только ваши бета-пользователи увидели новую функцию. Вы бы «включили» эту функцию для пользователей бета-версии, а остальные пользователи ее не увидят.

LDUser user = new LDUser("user@test.com");

boolean showFeature = ldClient.toggle("your.feature.key", user, false);

if (showFeature) {
     // application code to show the feature 
 }
else {
     // the code to run if the feature is off
 }

Я тестирую Флаги функций LaunchDarkly для некоторых интерфейсных тестов JS A / B - похоже, работают хорошо. Вы также можете проверить на этом сайте для переключения функций и библиотек флагов .

0 голосов
/ 20 апреля 2017

В моей компании мы используем флаги функций для каждой новой функции, которую мы представляем в нашем приложении SaaS.Помимо преимуществ для производительности, он также позволяет нам постепенно внедрять новые функции - сначала вводить новые функции для опытных пользователей, получать от них отзывы и импровизировать, прежде чем мы сможем развернуть их для всех пользователей.

Это также позволяет нам настраивать предложения для отдельных пользователей - опытные пользователи хотят все функции;простые пользователи могут просто захотеть базовых вещей и могут запутаться во всех мощных сложных функциях.Это также позволяет нашим специалистам по продажам повышать продажи.

И, конечно, как уже отмечали другие, если мы обнаружим, что функция вызывает снижение производительности, мы можем просто отключить эту функцию (либо для всех клиентовили для одного клиента, который вызывает проблему).

0 голосов
/ 19 апреля 2017

Флаги функций в основном дают вам возможность включать и выключать функцию без внесения каких-либо изменений в код или выпуска новой версии.Это важное решение, особенно для разработчиков мобильных приложений, поскольку у них нет контроля над пользователями, чтобы обновлять свои приложения до новой версии.

Существует несколько компаний, предоставляющих эту услугу разработчикам мобильных приложений.

...