Монолит или микросервисы: когда что

↑ 8.3 Микросервисы и распределённые системы · → Следующая

Желательно~3 мин чтенияУровень: senior

Зачем это на собесе

Зрелый ответ — «зависит», с критериями. Микросервисы не цель, а инструмент под организационные и нагрузочные ограничения.

Объяснение

КритерийМонолит (модульный)Микросервисы
Развёртываниеодин артефактнезависимое по сервису
Масштабированиецеликомпо сервисам
Технологииединый стекразные стеки
Транзакциилокальные ACIDраспределённые (саги, eventual consistency)
Сложность эксплуатациинизкаявысокая: сеть, наблюдаемость, деплой, версионирование API
Скорость разработкивысокая на стартевыше при большом числе команд
Отказоустойчивостьпадает всёизоляция сбоев (при правильном дизайне)
Отладкапрощераспределённый трейсинг
Стоимостьнижевыше (инфраструктура, платформенная команда)

Когда микросервисы оправданы:

  • Несколько автономных команд, мешающих друг другу в одном коде и релизах.
  • Разные профили нагрузки и масштабирования у частей системы.
  • Разные требования к технологиям или надёжности.
  • Чёткие bounded contexts.

Когда рано: маленькая команда, неясные границы, молодой продукт, нет культуры автоматизации (CI/CD, наблюдаемость).

Практика: Monolith First / Modular Monolith → выделять сервисы по мере надобности (Strangler Fig).

flowchart LR
  M[Монолит] -->|выделяем контекст| S1[Сервис A]
  M --> S2[Сервис B]
  P[Прокси] --> M
  P --> S1

Нюансы и подводные камни

  • Распределённый монолит: сервисы связаны синхронными вызовами и деплоятся вместе — все минусы обоих подходов.
  • «Микро» не про размер: сервис по границе бизнес-возможности.
  • Общая БД между сервисами уничтожает независимость.
  • Недооценка платформенных затрат (CI/CD, мониторинг, service mesh).
  • Закон Конвея: архитектура повторяет структуру команд.

Практика

  1. Оцените свой проект по критериям и обоснуйте выбор в ADR.
  2. Найдите в модульном монолите первый кандидат на выделение и его данные.

Вопросы с ответами

Связанные темы