Флаги функций
Совет
Это содержимое является фрагментом из электронной книги, архитектора облачных собственных приложений .NET для Azure, доступных в .NET Docs или в виде бесплатного скачиваемого PDF-файла, который можно прочитать в автономном режиме.
В главе 1 мы подтвердили, что в собственном облаке много о скорости и гибкости. Пользователи ожидают быстрое реагирование, инновационные функции и нулевое время простоя. Feature flags
— это современный метод развертывания, который помогает повысить гибкость для облачных приложений. Они позволяют развертывать новые функции в рабочей среде, но ограничивать их доступность. Щелкнув переключатель, вы можете активировать новую функцию для конкретных пользователей, не перезагрузив приложение или развернув новый код. Они отделяют выпуск новых функций от развертывания кода.
Флаги функций основаны на условной логике, которая управляет видимостью функций для пользователей во время выполнения. В современных облачных системах обычно развертываются новые функции в рабочей среде раньше, но тестируют их с ограниченной аудиторией. По мере повышения достоверности функция может быть постепенно развернута для более широкой аудитории.
К другим вариантам использования флагов функций относятся:
- Ограничить функциональные возможности premium определенным группам клиентов, желающим платить более высокую плату за подписку.
- Стабилизировать систему, быстро деактивируя функцию проблемы, избегая рисков отката или немедленного исправления.
- Отключите необязательную функцию с высоким потреблением ресурсов во время пиковых периодов использования.
- Проведение
experimental feature releases
небольших сегментов пользователей для проверки жизнеспособности и популярности.
Флаги функций также способствуют trunk-based
разработке. Это модель ветвления системы управления версиями, в которой разработчики совместно работают над функциями в одной ветви. Этот подход сводит к минимуму риск и сложность объединения большого количества длительных ветвь компонента. Функции недоступны до активации.
Реализация флагов компонентов
В основном флаг функции — это ссылка на простую decision object
. Он возвращает логическое состояние on
или off
. Флаг обычно упаковывает блок кода, который инкапсулирует возможность функции. Состояние флага определяет, выполняется ли этот блок кода для заданного пользователя. На рисунке 10–11 показана реализация.
if (featureFlag) {
// Run this code block if the featureFlag value is true
} else {
// Run this code block if the featureFlag value is false
}
Рис. 10-11 — реализация простого флага функции.
Обратите внимание, что этот подход отделяет логику принятия решений от кода функции.
В главе 1 мы обсудили этот вопрос Twelve-Factor App
. Рекомендации по поддержанию параметров конфигурации вне исполняемого кода приложения. При необходимости параметры можно считывать из внешнего источника. Значения конфигурации флага компонента также должны быть независимыми от базы кода. При внешней настройке флага в отдельном репозитории можно изменить состояние флага без изменения и повторного развертывания приложения.
Конфигурация приложений Azure предоставляет централизованный репозиторий для флагов компонентов. С его помощью вы определяете различные виды флагов признаков и управляете их состояниями быстро и уверенно. Вы добавите в приложение Конфигурация приложений клиентские библиотеки, чтобы включить функции флага функций. Поддерживаются различные платформы языка программирования.
Флаги функций можно легко реализовать в службе ASP.NET Core. Установка библиотек управления функциями .NET и поставщика Конфигурация приложений позволяет декларативно добавлять флаги компонентов в код. Они позволяют атрибутам FeatureGate
, чтобы вручную не писать инструкции в базе кода.
После настройки в классе Startup можно добавить функции флага компонентов на уровне контроллера, действия или по промежуточного слоя. Рис. 10-12 представляет реализацию контроллера и действия:
[FeatureGate(MyFeatureFlags.FeatureA)]
public class ProductController : Controller
{
...
}
[FeatureGate(MyFeatureFlags.FeatureA)]
public IActionResult UpdateProductStatus()
{
return ObjectResult(ProductDto);
}
Рис. 10-12 . Реализация флага компонента в контроллере и действии.
Если флаг компонента отключен, пользователь получит код состояния 404 (не найден) без текста ответа.
Флаги функций также можно внедрить непосредственно в классы C#. На рисунке 10-13 показана внедрение флага признаков:
public class ProductController : Controller
{
private readonly IFeatureManager _featureManager;
public ProductController(IFeatureManager featureManager)
{
_featureManager = featureManager;
}
}
Рис. 10-13 . Внедрение флага компонента в класс.
Библиотеки управления функциями управляют жизненным циклом флага компонента за кулисами. Например, чтобы свести к минимуму большое количество вызовов в хранилище конфигурации, состояния флагов флагов библиотек кэшируются в течение указанной длительности. Они могут гарантировать неизменяемость состояний флагов во время вызова запроса. Они также предлагают Point-in-time snapshot
. Вы можете восстановить историю любого ключевого значения и указать его последнее значение в любой момент в течение предыдущих семи дней.