2.2.4 · блок 2
Непрерывная архитектура
Непрерывная архитектура
Зачем это нужно
Классический подход: архитектор нарисовал диаграмму на год вперёд, команда «должна следовать». Реальность: требования меняются, модели обновляются каждую неделю, нагрузка растёт непредсказуемо. 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.