ENIGMA AI
ENIGMA AI

В чем основные отличия между монолитной и микросервисной архитектурой?

встречается 15× middle architecture

Как ответить

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

Монолит проще в разработке на старте. Если команда до 5 человек и продукт не требует высокой доступности, монолит — рабочий вариант. Всё в одном репозитории, одна сборка, один деплой. Но когда кодовая база вырастает до 500 тысяч строк, начинаются проблемы: любое изменение тянет за собой полный редеплой, CI/CD пайплайн тормозит, а баг в одном модуле валит всё приложение. Типичный пример — интернет-магазин, где падение страницы товара ломает и корзину, и оплату.

Микросервисы решают это через изоляцию. Каждый сервис отвечает за свою доменную область: каталог товаров, корзина, платежи — отдельные приложения со своей базой данных и API. Если падает сервис каталога, корзина всё ещё работает, хотя товары не отображаются. Масштабирование тоже точечное: под Black Friday можно накинуть 10 инстансов на сервис заказов, не трогая остальные. Но за это платим сложностью: нужно поднимать service mesh (например, Istio), настраивать circuit breakers, распределённый трейсинг через Jaeger, и синхронизировать данные между сервисами через события или Saga-паттерны.

На практике выбор архитектуры часто упирается в границы контекстов по DDD. Если у вас чётко выделенные bounded context'ы с независимыми данными — микросервисы оправданы. Если бизнес-логика тесно связана (например, в ERP-системе модули "Закупки" и "Склад" постоянно обмениваются данными) — монолит проще поддерживать. Я видел проекты, где микросервисы разбили на 50 штук, а потом потратили год на то, чтобы переписать их обратно в модульный монолит, потому что транзакционная целостность стала адом.

Ключевые метрики для решения: latency между сервисами (если больше 10ms — уже проблема), частота изменений в каждом модуле, и размер команды. Для команды из 10 человек оптимально 3-5 микросервисов, не больше.

Ключевые тезисы

  • Монолит — один процесс, микросервисы — отдельные процессы для каждого сервиса
  • Масштабирование: в монолите вертикальное (увеличиваем мощность сервера), в микросервисах — горизонтальное (добавляем инстансы нужных сервисов)
  • Изоляция ошибок: в монолите баг валит всё приложение, в микросервисах — только один сервис
  • Сложность: монолит проще на старте, микросервисы требуют инфраструктуры (service mesh, распределённый трейсинг, саги)
  • Выбор архитектуры зависит от границ bounded context'ов по DDD и размера команды

Что спросят дальше

  • — Как бы ты спроектировал коммуникацию между микросервисами, если нужно гарантировать доставку события при возможных падениях сервиса-получателя?
  • — В каком случае ты бы выбрал модульный монолит вместо микросервисов, и какие критерии для этого решения?
  • — Опиши, как бы ты организовал distributed tracing в системе из 10 микросервисов на Kubernetes

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение