Что такое Feature Flags (флаги функциональности)?
Feature Flags (Feature Toggles) – техника, позволяющая включать и выключать функциональность без повторного развёртывания приложения. Код новой функции присутствует в production, но активируется по условию. Это как выключатель света в комнате – провода проложены, лампа на месте, но свет горит только когда щёлкнешь переключатель.
Пример
@Service
public class PaymentService {
private final FeatureFlagService featureFlags;
public PaymentResult processPayment(PaymentRequest request) {
if (featureFlags.isEnabled("new-fraud-check")) {
// Новая логика проверки на мошенничество
fraudCheckV2.check(request);
} else {
// Старая логика
fraudCheckV1.check(request);
}
return executePayment(request);
}
}
Типы Feature Flags
| Тип | Цель | Время жизни | Пример |
|---|---|---|---|
| Release Toggle | Скрытие незавершённой функциональности | Короткое (до релиза) | Trunk-based development: код в main, но фича выключена |
| Experiment Toggle | A/B-тестирование | Среднее | Часть пользователей видит вариант A, часть – вариант B |
| Ops Toggle | Оперативное управление | Длительное | Отключение тяжёлой функции при деградации производительности |
| Permission Toggle | Доступ по группам | Длительное | Функциональность только для beta-тестеров или VIP-клиентов |
Инструменты
- Togglz – Java-библиотека для Feature Flags.
- Unleash – open-source сервер Feature Flags с SDKами для разных языков.
- LaunchDarkly – облачный SaaS с расширенной аналитикой.
- Самописное решение на Spring + БД/Redis.
Лучшие практики
- Удалять флаги после полного включения функции. Иначе код засоряется ветвлениями, и через полгода никто не знает, какие флаги ещё актуальны.
- Логировать состояние флагов для отладки – при расследовании инцидента важно знать, какой путь выполнялся.
- Тестировать обе ветки (включено и выключено) в автоматических тестах.
- Вести реестр активных флагов с указанием владельца и плановой даты удаления.
Итог
Feature Flags критичны при постепенном раскатывании новой функциональности: можно включить фичу для 1% пользователей, убедиться в стабильности, и постепенно увеличить до 100%. Если что-то пошло не так – мгновенный откат через выключение флага, без необходимости деплоя.
На собеседовании: Интервьюер хочет услышать типы флагов и понимание их жизненного цикла. Частая ошибка – не упоминать необходимость удаления флагов после полного включения, что приводит к техническому долгу.