Главная проблема монолита — это огромный Blast Radius (Радиус поражения). Из-за сильной связности ошибка в некритичном модуле может вызвать каскадный сбой всей системы. Разберем реальный кейс.
- Контекст: Все модули (лента, профили, сообщения) живут в одном репозитории и ходят в общую базу данных.
- Изменение: Команда «Ленты» добавляет новое обязательное поле в таблицу
для нужд ML-ранжирования.users - Катастрофа: Модуль «Сообщений» ничего не знает о новом поле. Его ORM-слой (например, Hibernate или SQLAlchemy) при попытке прочитать данные ловит ошибку Schema Mismatch и падает.
- Урон: Несмотря на то, что «Лента» работает, пользователи не могут отправить сообщения. SLA нарушено, бизнес теряет деньги из-за плохой изоляции данных.
Интеграция микросервисов
| Подход | Плюсы | Минусы | Когда применять |
|---|---|---|---|
| Sync REST / gRPC | Легко отлаживать, строгие контракты. | Каскадные тайм-ауты (если один тормозит — тормозят все). | CRUD, где важна мгновенная свежесть данных. |
| Async Messaging | Низкая связность, устойчивость к пикам нагрузки. | Сложно отслеживать путь запроса (трейсинг), нужна идемпотентность. | События (заказ оплачен), рассылки, биллинг. |
| Общая БД (Shared DB) | Очень быстро в разработке (PoC). | Антипаттерн! Schema Drift рушит систему (см. кейс выше). | Только как временное решение при миграции. |
Инфраструктурный стек
Чтобы не утонуть в сотне сервисов, тебе обязательно понадобятся:
- Service Discovery: Инструмент, который знает актуальные IP-адреса всех сервисов (Consul, Eureka). Его будем разбирать уже совсем скоро.
- Distributed Tracing (Jaeger/Zipkin): Позволяет увидеть путь запроса через 20 микросервисов и понять, какой из них тормозит. Подробнее посмотри в рамках «Неделя 6».
- OpenAPI/Swagger: Живая документация. Если спецификация не лежит рядом с кодом — её не существует. Разбирали в рамках «Неделя 2»
Советы при распиле
- Не делай «идеально» сразу: Если выпиливаешь кусок из огромного монолита малым числом людей — делай Lift and Shift (перенос логики 1-в-1). Сначала изолируй данные, а рефакторингом займешься потом.
- Канареечные релизы: Никогда не раскатывай новый микросервис на 100% трафика. Начни с 1-5%, проверь логи, и только потом открывай кран.