План курса / Все задачи / System Design
Краткая выжимка
- Декомпозиция монолита
- Разделяй монолит на микросервисы по бизнес-доменам, субдоменам (DDD) или организационной структуре (например, команда → сервис)
- Пример: «Сервис заказов» → отдельный микросервис для управления ордерами
- CQRS для разделения нагрузки
- Отделяй операции записи (команды) и чтения (запросы). Используй разные БД
- CQRS (Command Query Responsibility Segregation) улучшает масштабируемость и упрощает оптимизацию запросов
- Асинхронная коммуникация
- Используй брокеры сообщений (Kafka, RabbitMQ) для обработки пиковых нагрузок и буферизации
- Пример: Отправка уведомлений через очереди, а не синхронные вызовы.
- Важно: Не забудь про Correlation ID для трейсинга!
- Health Check API
- Добавляй Liveness и Readiness пробы для контроля состояния сервисов.
- Liveness проверяет, "жив" ли сервис, Readiness — готов ли принимать трафик.
Частые ошибки
- Синхронные вызовы между сервисами:
- Приводит к каскадным сбоям.
- Решение: Замена на асинхронное взаимодействие (очереди, ивенты).
- Смешивание ответственности в одном сервисе:
- Антипаттерн: Сервис, который и обрабатывает платежи, и генерирует отчеты.
- Решение: Четкое разделение по бизнес-доменам.
- Игнорирование трассировки:
- Без Trace ID сложно отслеживать запросы в распределенной системе.
- Инструменты: Jaeger, Zipkin
- Observarbility — не роскошь
- Логи, метрики, трейсы — обязательно. Без них ты слепой в production-аду
- Инструменты: Prometheus для метрик, Jaeger для трейсинга, ELK для логов
Хорошие практики
- Service Discovery:
- Используй Kubernetes DNS или Consul для автоматического обнаружения сервисов
- Пример: Клиент запрашивает адреса инстансов через центральный реестр
- Transaction Outbox:
- Гарантируй доставку сообщений через запись в отдельную таблицу (Outbox) + фоновую обработку
- Репликация данных для чтения:
- Создавай денормализованные «витрины» данных (например, кэш Redis)
- Пример: Репликация данных пользователей для быстрого доступа в Order Service
- API Gateway:
- Централизуйте аутентификацию, лимиты запросов и маршрутизацию
- Возможность встроить BFF внутрь Api Gw
- Инструменты: Kong, Apigee
- Health Checks + Circuit Breaker
- Если сервис умирает — не тащи за собой всех. Отсекай его через Hystrix или Istio, пока не починишь