
Эволюционная архитектура на практике
Из чего она состоит и когда пора начинать

Из чего она состоит и когда пора начинать
Из чего она состоит и когда пора начинать
К чему нам эволюционная архитектура
16+ млн клиентов и рост около 35% в год
Мультипродуктовая компания со своими IT-вертикалями
Продукты объединяются в экосистему
Монолитные команды делятся на stream-aligned
Зачем эволюционная архитектура вам
По мере развития системы копится технический долг
Если его не отдавать, может наступить банкротство
Это выливается в революционные системы 2.0, 3.0
Но к процессу можно подходить эволюционно
Два определения, на которые опирается доклад
А что такое архитектура
Набор важных дизайн-решений, формирующих систему
Уровень важности определяется стоимостью изменений
И общее понимание траектории и границ
Куда движется проект и какая у него ментальная модель
Инкрементальные и управляемые изменения
Из чего состоит эволюционная архитектура
Инкрементальные изменения: build и deploy
Управляемые изменения: fitness functions
Модульность и снижение связности бизнесовых фич
Плюс подходящий coupling между частями системы
Замкнутый цикл от идеи до деплоя
Идея → требования → разработка → deploy
Идея
Требования
Разработка
Deploy — и цикл повторяется
Чем меряется соответствие архитектуры
Определение из книги «Evolutionary Architecture»
Мера приспособленности решения к контексту
Контекст при этом меняется
Выступает руководством для развития
И ограничением, в рамках которого оно идёт
Архитектурные характеристики и что их меряет
Характеристики: availability, latency, throughput, security
Меряют их юнит-, интеграционные и контрактные тесты
Плюс архитектурные и процессные метрики
И мониторинг с алертингом
Ключевые, релевантные, нерелевантные
Ключевые — критичны при архитектурных решениях
Над ними работаем раньше и серьёзнее всего
Релевантные важны при реализации требований
Нерелевантные не требуют fitness functions
Инструментарий для автоматизации проверки
Статический анализ кода и фреймворки тестирования
Тестирование на проникновение и нагрузочное
Мониторинг и логгирование
Архитектурные проверки: ArchUnit, Danger, fitv
Модульность и организация компонентов
Modularity, cohesion, coupling
Modularity — логическая группировка взаимосвязанного кода
Cohesion — насколько части модуля должны быть вместе
Coupling — степень взаимозависимости между модулями
Одно про связи внутри, другое — про связи между
Принципы организации компонентов системы
SDP: зависимости направлены в сторону устойчивости
I = FanOut / (FanIn + FanOut) — нестабильность
SAP: абстрактность соответствует стабильности
A = Na / Nc — абстрактность компонента
Триггеры эволюции команд и их связь с архитектурой
Закон Конвея и brownfield, а не greenfield
Организации проектируют системы по своим коммуникациям
Желаемая структура команд меняется
Значит, систему надо перепроектировать
Бизнес не готов к паузам — редизайним эволюционно
Триггеры эволюции команд
Софт стал слишком большим для одной команды
Темпы поставки устойчиво замедлились
Бизнес-сервисы опираются на разрозненные нижележащие
У каждого триггера свои симптомы
Что такое эволюционная архитектура и когда она нужна
Что такое эволюционная архитектура
Зачем она нужна
Из чего она состоит: инкрементальные изменения
…fitness functions и подходящий coupling
Когда уже пора начать эволюцию команд и архитектуры
Источники с финального слайда доклада
«Evolutionary Architecture» и «Fundamentals of Software Architecture»
«Clean Architecture» с двумя обзорами
«Team Topologies» и саммари в трёх частях
Статьи про двойную петлю обучения и Essential Architecture
polomodov.tech
Все слайды и ссылки — в Telegram-канале
Александр Поломодов, Technical Director & Fellow, Т-Технологии
@book_cube