2.2.2 · блок 2
C4-модель: Context и Containers
C4-модель: Context и Containers
Зачем это нужно
Архитектурные диаграммы часто превращаются в «кашу из стрелок»: 40 блоков, никто не понимает, за что отвечает ML-сервис. C4 model (Simon Brown) — иерархия из четырёх уровней детализации: Context → Containers → Components → Code. На каждом уровне аудитория своя: PM смотрит Context, MLE — Containers, разработчик — Components.
Для курса достаточно первых двух уровней. Это навык, который вы используете в Confluence, ADR и onboarding-документации.
Основные идеи
Level 1: System Context — «как система вписана в мир». Один центральный блок (ваша система), вокруг — пользователи и внешние системы. Без технологий, без протоколов — только *кто* с *кем* взаимодействует.
Level 2: Containers — «из чего состоит система». Container в C4 — не Docker-контейнер, а *развёртываемая единица*: веб-приложение, API, база данных, ML-сервис, очередь. На диаграмме указаны технологии и протоколы связи.
Уровни 3–4 (Components, Code) — внутренняя структура одного container; на старте курса не обязательны.
Правила хорошей C4-диаграммы:
- Один diagram — один уровень; не смешивать Context и Containers на одном рисунке.
- Подписи на связях: «запрашивает скоринг», не просто стрелка.
- Легенда: типы элементов (person, system, container).
- Хранить рядом с Service Page в Confluence; обновлять при изменении границ.
Как это выглядит на практике
Пример: система «Product Recommendations»
Context (Level 1)
[Покупатель] --просматривает рекомендации--> [Recommendation System]
[Аналитик] --смотрит метрики--> [Recommendation System]
[Recommendation System] --читает каталог--> [Catalog Service]
[Recommendation System] --отправляет события--> [Analytics Platform]
Центральный блок — наша система целиком. Внешние системы — чёрные ящики.
Containers (Level 2)
Внутри Recommendation System:
| Container | Технология | Назначение |
|-----------|------------|------------|
| Web Storefront | React | UI магазина |
| API Gateway | Nginx | Маршрутизация, rate limit |
| Recommendation API | Python/FastAPI | REST для рекомендаций |
| ML Inference Service | Python, ONNX Runtime | Генерация рекомендаций |
| Feature Store | Redis | Онлайн-фичи пользователя |
| Model Registry | S3 + metadata DB | Версии моделей |
| Training Pipeline | Airflow | Переобучение раз в сутки |
Связи:
- Web Storefront → API Gateway: HTTPS
- API Gateway → Recommendation API: HTTP
- Recommendation API → ML Inference Service: gRPC
- ML Inference Service → Feature Store: Redis protocol
- Training Pipeline → Model Registry: запись артефактов
- ML Inference Service → Model Registry: загрузка модели при старте
MLE при onboarding открывает Container-диаграмма и за 5 минут понимает, куда встроить новый endpoint. PM на Context видит, что Catalog Service — внешняя зависимость (риск для сроков).
Инструменты: draw.io, Structurizr, Mermaid в Markdown — главное следовать нотации C4.
Что сделать после занятия
- [ ] Нарисуйте Context-диаграмму для учебного ML-проекта (минимум 1 person, 2 external systems).
- [ ] Разверните Context в Containers: минимум 4 container, подпишите технологии.
- [ ] Добавьте диаграмму на Service Page (Confluence или Markdown в репозитории).