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

Эта история основана на проекте, в котором я использовал LaunchDarkly для обработки флагов функций. LaunchDarkly — это сторонний инструмент, обеспечивающий хороший контроль над флагами функций, и вы можете легко интегрировать его в свое приложение. Он предоставляет удобную панель управления, на которой вы можете управлять флагами функций в различных средах testing, staging и production.

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

  • Флажки функций true/false – это общий флаг функции для включения и отключения функции, который используется в большинстве случаев.
  • Флаги функций с определенными значениями — этот флаг функции предоставляет различные предопределенные значения, которые вы определяете для функции. Использование этих определенных значений. Вы можете выбрать различные реализации функции или пользовательского интерфейса в зависимости от того, какое значение предоставляется флагом функции. Например, в нашем проекте мы создали флаг функции для navigation, чтобы увидеть, какая навигация используется чаще всего с предопределенными значениями Drawer И Bottom.

Механизм обработки флагов

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

  • Когда вы создаете флаг, вы должны установить в своем коде значение по умолчанию для этого флага, которое в большинстве случаев должно быть false. Если ваши флаги имеют предопределенные значения, вы можете выбрать, какое из них должно быть поведением по умолчанию. Фактические значения флагов извлекаются из бэкэнда при запуске приложения, пока вы не прочитаете их из бэкэнда, вы должны установить такие значения по умолчанию.
  • Когда последние значения извлекаются из серверной части, они должны быть сохранены на стороне приложения, чтобы сохранить состояние/моментальный снимок флагов в базе данных для автономной поддержки и в течение периода времени до получения новых обновлений.
  • При проверке флага вы должны отдавать предпочтение предыдущим извлеченным значениям, хранящимся в базе данных, так как вероятность быстрого изменения флагов меньше.
  • Если у вас есть флаг, который меняется чаще, вы должны обрабатывать обновления этого флага в реальном времени. т. е. вы должны прослушивать изменения флага, когда приложение работает на переднем плане, и отражать эти изменения, пока пользователь находится в вашем приложении.
  • Когда флаг меняется на лету, учитывая, что пользователь использует приложение, вы должны хорошо ориентироваться для пользователя от функции, в которой говорится, что функция отключена, или если активируется новая функция, которую пользователь сразу заметит, тогда вы должны предоставить потоки / шаги для удобного перехода для пользователя, конечно, все зависит от ситуации, варианта использования и необходимости
  • Когда вы создаете функцию под флагом функции, вы должны убедиться, что все отключено под этим флагом функции для этой конкретной функции. Например, все сетевые вызовы, все смещения пользовательского интерфейса, любой фоновый процесс, связанный с функцией, потому что при установке флага false в любом случае не должно выполняться никакого связанного кода.
  • У вас должна быть поддержка флагов для разных сред testing, staging и production, чтобы поддерживать тестирование и снижать риски.

Конфигурации флагов

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

Информация о параметрах

У нас должна быть метаинформация о пользователе на сервере или третьей стороне, которая обрабатывает флаги функций в облаке, чтобы мы могли enable/disableкак захотим. Например, мы должны предоставить следующие основные параметры серверу или третьей стороне, когда пользователь запускает приложение или переходит из фона на передний план.

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

Преимущества пометки функций

- Продолжается предоставление функций / итеративные улучшения

Самым большим преимуществом флага функции является то, что он позволяет вам быстро выпускать функции, собирать отзывы, улучшать, повторять функции и повторно развертывать.

- Управление рисками

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

- Частичное и поэтапное развертывание

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

Например, мы создали флаг функции с именем feature_chat_service с определенными значениями stomp и twillio. Поскольку мы недавно выпустили twillio и не хотели включать сразу для всех пользователей, поэтому мы установили 10% для службы чата twillio и 90% для службы чата stomp, поэтому мы можно постепенно начать увеличивать процент после анализа и мониторинга, если все работает как положено.

- А/Б-тестирование

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

Например, мы хотели проверить, используется ли больше всего DrawerNavigaiton или BottomNavigation, для этого мы создали флаг функции для LaunchDarkly с именем feature_app_main_navigation и определили два значения drawer и bottom . Затем в приложении отображается соответствующая навигация на основе предоставленного значения, а на LaunchDarkly устанавливается процент развертывания 50% для обоих значений.

- Планирование

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

- Функция обновления

Функция Upgrade Interstitial может быть полностью реализована с помощью флага функции LaunchDarkly. Вы можете указать различные условия/правила на панели инструментов в зависимости от флага. Эти разные правила будут основаны на приложении version, описывающем, когда показывать пользователю межстраничное объявление об обновлении, вам не нужно явно реализовывать какую-либо службу на вашем сервере, чтобы реализовать эту общую функцию.

Возможность тестирования?

Флаги функций тестирования должны выполняться на основе сред testing , staging и production . Для одного флага функции каждая конфигурация среды будет независимой от другой среды, поэтому флаги функций можно будет протестировать в назначенной среде перед переходом в другие среды. LaunchDarkly предоставляет эти три среды.

Надеюсь, это было полезно :)

Подпишитесь, чтобы узнать больше историй на темы Android и 👏, если вам понравилось.

— — — — — — — — — — — — — —

Гитхаб | ЛинкедИн | Твиттер