Подтвердить что ты не робот

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

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

5 вещей, токсичных для масштабируемости, "5. Отсутствие функциональных флагов"

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Если вы сделали это так далеко, то вам могут понравиться некоторые из моих других мыслей о разработке магистрали, переключении функций и других глупых идеях, таких как TEST, QA, SIT, STAND, CROUCH.

Ответ 2

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

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

Подробнее здесь:

- EDIT:

Функциональные флаги java-реализации.

Ответ 3

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

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

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

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

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 6

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

Мы также создали внутреннюю страницу администратора, где мы можем настроить флаги функций. Некоторое время это работало довольно хорошо, но после этого мы хотели бы сделать таргетинг на пользователей и A/B-тестирование. Разрабатывать самостоятельно. Казалось, слишком много усилий, поэтому мы выбрали стороннее решение. Как уже упоминалось здесь, есть много решений для этого.

Мы выбрали ConfigCat, потому что он поддерживает настраиваемые целевые группы и развертывание в процентах одновременно. Вы можете проверить поддерживаемые sdks с открытым исходным кодом на github.

Ответ 7

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

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

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

Ответ 8

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

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

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

Ответ 9

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

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

LDUser user = new LDUser("[email protected]");

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 на переднем конце - кажется, работает хорошо. Вы также можете проверить этот сайт для переключения функций и библиотек флагов.

Ответ 10

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

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

Ответ 11

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

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

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