Аннотация 2
Перечень условных обозначений 3
Введение 4
1 Анализ требований 5
1.1 Описание проблемы 5
1.2 Анализ текущей инфраструктуры 6
1.3 Предметная область 7
1.3.1 Правила активации и таргетирования feature-флагов 8
1.4 Формализация требований 10
1.4.1 Функциональные требования 11
1.4.2 Нефункциональные требования 11
1.5 Анализ существующих решений 12
2 Проектирование инструмента 15
2.1 Проектирование клиентской библиотеки 15
2.1.1 Механизм получения сервисами feature-флагов 15
2.1.2 Проблема рассогласованности feature-флагов 19
2.1.3 Работа с областями видимости 22
2.2 Проектирование компонента управления feature-флагами 23
2.2.1 Конфигурации feature-флагов в git-репозитории 23
2.2.2 Модель данных 25
2.3 Выбор технологий 26
2.4 Архитектура 28
3 Реализация инструмента 30
3.1 Реализация клиентской библиотеки 30
3.1.1 Структура клиентской библиотеки 30
3.1.2 Разработка механизма получения и отправки контекста 32
3.1.3 Проверка feature-флагов 33
3.1.4 Обработка аннотаций 35
3.1.5 Использование клиентской библиотеки 38
3.2 Разработка компонента управления feature-флагами 40
3.2.1 Структура компонента управления feature-флагами 40
3.2.2 API компонента управления feature-флагами 42
3.2.3 Взаимодействие с GitLab API 43
Заключение 46
Список литературы и использованных источников 47
Современные распределенные системы характеризуются высокой сложностью и необходимостью оперативного реагирования на изменяющиеся условия эксплуатации. В таких условиях особенно важна возможность динамического управления функциональностью системы без необходимости перезапуска ее отдельных компонентов. Одним из подходов к решению подобных задач является использование feature-флагов [1]. Особенно актуально их применение в распределенной инфраструктуре, где гибкость и оперативность изменений имеют критическое значение.
Внедрение и использование feature-флагов приносит ряд преимуществ, среди которых можно выделить:
• гибкость развертывания - возможность постепенного включения функциональности для различных групп пользователей;
• A/B тестирование - оценка влияния изменений на пользовательский опыт в контролируемых условиях;
• минимизация рисков - быстрое отключение проблемных функциональностей для минимизации потенциального ущерба;
• ускорение разработки и цикла выпуска версий - выпуск неполных или экспериментальных функций без риска нарушения общей стабильности системы.
Несмотря на перечисленные преимущества, внедрение механизма управления feature-флагами сопряжено с рядом технических вызовов, особенно в распределенных системах. Среди таких вызовов - необходимость поддержания согласованности состояния feature-флагов между различными компонентами и минимизация задержек в распространении изменений.
В связи с этим актуальной задачей является разработка специализированного программного инструмента для централизованного управления feature-флагами. Целью данной выпускной квалификационной работы является разработка инструмента управления feature-флагами. В процессе работы предстоит провести выбор подходящих технологий и архитектурных решений, учитывая особенности распределенной инфраструктуры.
Для достижения поставленной цели были определены следующие задачи:
• проанализировать требования;
• спроектировать инструмент;
• реализовать инструмент.
В ходе выполнения выпускной квалификационной работы был разработан инструмент управления feature-флагами, ориентированный на инфраструктуру компании X. Был проведен анализ предметной области, сформулированы функциональные и нефункциональные требования, спроектирована архитектура, а также разработаны компонент управления feature-флагами и клиентская библиотека для интеграции сервисов с этим компонентом.
Таким образом, цели и задачи, поставленные в начале работы, достигнуты. Разработанный инструмент планируется поэтапно внедрять в инфраструктуру компании.