Диаграммы С4 - Контейнеры, Компоненты и Развёртывание

Диаграммы С4 - Контейнеры, Компоненты и Развёртывание

Как понятно показать архитектуру системы без лишней сложности?

В C4-модели после Диаграммы Контекста (уровень 1) самым важным и полезным уровнем является уровень 2 — Диаграмма Контейнеров.

Что такое «Контейнер» в C4?
Контейнер — это любое независимо развертываемое и исполняемое приложение или хранилище:
- Веб-приложения, мобильные приложения, desktop-приложения
- API-сервисы и микросервисы
- Базы данных
Брокеры сообщений (Kafka, RabbitMQ)
- Хранилища файлов (S3, Ceph)
- Serverless-функции
Скрипты, батч-процессы и т.д.

Диаграмма Контейнеров (Container Diagram)
Это самая обязательная диаграмма при документировании архитектуры.
Преимущества:
- Понятна и заказчику, и разработчикам, и DevOps
- Показывает, из каких крупных частей состоит система
- Отлично подходит для onboarding новых сотрудников

Пример: Пользователь → Мобильное приложение → API Gateway → Auth Service → User Service → PostgreSQL → Notification Service → Kafka → File Storage (S3)

Диаграмма Компонентов (Component Diagram)
Это уровень 3 C4-модели. Рисуется внутри отдельного контейнера.
Показывает, из каких крупных модулей/компонентов состоит конкретный сервис.
Когда использовать:
- Для сложных микросервисов
- При детальном проектировании backend-приложения
- Для понимания внутренней структуры важного контейнера
Пример (внутри User Service):
API Layer
Business Logic Layer
Domain Services
Repository Layer
Integration Clients (для внешних систем)

Совет: Не рисуйте компонентные диаграммы для всех контейнеров. Делайте только для самых важных и сложных.

Диаграмма Развёртывания (Deployment Diagram)
Показывает где и как физически/в облаке размещаются контейнеры.
Что отображает:
- Серверы, кластеры Kubernetes, виртуальные машины
- Облачные сервисы (AWS, Yandex Cloud, Azure)
- Docker-контейнеры, Pod’ы
Окружения (Prod, Stage, Dev)
Балансировщики, CDN, Firewall

Полезна для:
- DevOps-команды
- Архитекторов
- При планировании инфраструктуры и отказоустойчивости

Пример:
Frontend → Vercel / CloudFront
Backend Services → Kubernetes Cluster (3 ноды)
Database → Managed PostgreSQL (Yandex или AWS RDS)
Cache → Redis (отдельный кластер)

Как быстро рисовать все эти диаграммы
Инструменты:
- draw.io — лучший выбор
- Miro
Практические рекомендации:
- Используйте официальные C4-иконки
- Каждый контейнер подписывайте: Название [Технология]
- Добавляйте стрелки с протоколами (HTTPS, gRPC, JDBC)
- Не перегружайте одну диаграмму (максимум 8–12 элементов)
- Делайте версии: общую + детальные

Правило хорошего тона: Если вы делаете только одну архитектурную диаграмму на проект — делайте Диаграмму Контейнеров. Остальные рисуйте по необходимости.

Вопрос к вам в комментариях:
Какой уровень C4 вы используете чаще всего? Рисуете ли Диаграмму Компонентов и Развёртывания на своих проектах?