02 · Инженерия и архитектура2.2 · Архитектура ПО2.2.4средний

Непрерывная архитектура

Зачем это нужно

Классический подход: архитектор нарисовал диаграмму на год вперёд, команда «должна следовать». Реальность: требования меняются, модели обновляются каждую неделю, нагрузка растёт непредсказуемо. Continuous Architecture (also Evolutionary Architecture) — подход, при котором архитектура развивается вместе с продуктом, а не застывает в документе.

Для ML это особенно актуально: вы не знаете заранее, будет ли в продакшене LightGBM или нейросеть на GPU. Нужны guardrails, которые не дают системе деградировать при изменениях.

Основные идеи

Evolutionary architecture — набор принципов:

  • Решения откладывают до последнего ответственного момента (не лень, а меньше неверных ставок).

  • Архитектура поддерживает изменяемость — модульность, слабая связность.

  • Каждое изменение можно откатить или заменить компонент без «big bang rewrite».

Fitness functions (функции пригодности) — автоматические проверки, что архитектура не «сломалась» молча. Borrowed from evolutionary computation: система «выживает», пока метрики в норме.

Примеры fitness functions для ML-системы:

Fitness function Что проверяет Где запускается
p95 latency < 200 ms Performance SLA CI load test / synthetic monitor
Cyclic dependency check Модули не зависят циклически CI (arch unit test)
Model AUC ≥ baseline Качество не упало Training pipeline gate
API backward compatible Clients не ломаются Contract tests in CI
No secrets in repo Security pre-commit / CI

Если fitness function падает — merge блокируется или алерт эскалируется.

Связь с CI/CD и MLOps. Непрерывная архитектура — не отдельный процесс, а часть delivery:

  • ADR описывает намерение.

  • C4 описывает текущее состояние.

  • Fitness functions защищают атрибуты качества при каждом PR.

  • Postmortem и ADR Superseded — обучение системы на инцидентах.

ML добавляет fitness functions на data drift, prediction distribution, feature schema validation.

Anti-pattern: «Big design upfront» для ML — six-month architecture phase, потом оказывается, что данных для deep learning нет. Лучше: thin vertical slice (online scoring с простой моделью) + fitness functions + итерации.

Как это выглядит на практике

Команда запустила v1 fraud scoring (LightGBM, ADR-003). Через 3 месяца DS хочет neural network.

Evolutionary path:

  1. RFC: «Neural network as secondary scorer» — не замена, а эксперимент за feature flag.

  2. Fitness functions расширяют: новая модель должна match recall baseline на shadow traffic.

  3. Container diagram обновляют: добавляется ML Inference Service v2 параллельно v1.

  4. Shadow mode 2 недели — fitness green → ADR-007 Accepted → постепенный rollout.

  5. ADR-003 помечается Superseded для online path.

Jira Epic «Fraud ML v2» содержит stories на fitness functions до stories на модель. Confluence architecture page версионируется.

System Design Space напоминает: каждое решение — trade-off; continuous architecture делает trade-offs явными и проверяемыми.

Что сделать после занятия

  • Придумайте 3 fitness functions для учебного ML-сервиса — что измерять и где запускать.

  • Опишите, как бы вы эволюционно заменили простую модель на более сложную без big bang.

  • Свяжите fitness function с quality attribute из урока 2.2.1.

Официальные материалы