Монолит и микросервисы

Базовый System Design
≈ 2 мин чтения

Один продукт можно разделить по-разному

Архитектура приложения — это не выбор между «старым монолитом» и «современными микросервисами». Главный вопрос в другом: где проходят границы ответственности и насколько независимо должны изменяться, развёртываться и масштабироваться разные части системы.

Монолит может быть простым и удобным, а микросервисы — добавить больше проблем, чем решить. Поэтому в этом разделе мы сначала разберём цель каждого подхода, а уже затем посмотрим, когда разделение системы действительно оправдано.

Что разберём

  • Монолит. Посмотрим, как устроено приложение, которое собирается и развёртывается как единое целое, и почему это часто хороший старт.
  • Модульный монолит. Разберём, как сохранить единое развёртывание, но провести явные внутренние границы между частями системы.
  • Основы микросервисов. Поймём, что именно делает сервис самостоятельным и какие новые свойства появляются после разделения приложения на процессы.
  • Декомпозиция сервисов. Научимся искать разумные части системы для выделения, а не делить приложение по таблицам или техническим слоям.
  • Границы сервисов. Разберём, какие данные и правила должны принадлежать одному сервису и почему неудачная граница создаёт постоянные зависимости.
  • Database per Service. Посмотрим, зачем микросервисам владеть своими данными и почему общая база возвращает сильную связанность.
  • Переход к микросервисам. Разберём постепенную миграцию вместо рискованного переписывания всей системы за один раз.
  • Компромиссы микросервисов. Соберём вместе стоимость распределённой архитектуры и критерии, по которым её преимущества действительно окупаются.

Двигаться будем от самой простой формы приложения к всё большей независимости частей системы. Так станет видно не только что дают микросервисы, но и какую цену приходится платить за эту независимость.

Архитектурный стиль — не цель сам по себе. Хорошая структура помогает команде менять систему безопаснее и быстрее. Если разбиение не даёт этого эффекта, само количество сервисов ничего не улучшает.