Какие плюсы и минусы у монолитной и микросервисной архитектур?

«Какие плюсы и минусы у монолитной и микросервисной архитектур?» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Монолитная архитектура

  • Плюсы:
    • Простота разработки: Единая кодовая база, простой запуск, отладка и тестирование (можно запустить всё локально).
    • Простота развертывания: Один артефакт (WAR/JAR, исполняемый файл) для деплоя.
    • Производительность: Вызовы между компонентами — это обычные вызовы методов в памяти, нет сетевых задержек и накладных расходов на сериализацию.
    • Согласованность данных: Использование транзакций ACID в рамках одной базы данных.
  • Минусы:
    • Сложность масштабирования: Можно масштабировать только весь монолит целиком («вертикально» или запуская несколько одинаковых копий), а не отдельные нагруженные модули.
    • Технологический стек: Привязанность к одному стеку технологий для всего приложения.
    • Надежность: Баг в одном модуле может «повалить» всё приложение.
    • Эволюция: По мере роста кодовая база становится громоздкой, замедляется разработка и онбординг новых разработчиков.

Микросервисная архитектура

  • Плюсы:
    • Независимое масштабирование: Каждый сервис можно масштабировать независимо в зависимости от его нагрузки.
    • Независимое развертывание: Сервисы можно разрабатывать, тестировать и деплоить независимо друг от друга, что ускоряет delivery.
    • Гетерогенность технологий: Разные сервисы можно писать на разных языках и использовать разные БД, выбирая оптимальный инструмент для задачи.
    • Отказоустойчивость: Падение одного сервиса не обязательно приводит к падению всей системы (при правильной реализации отказоустойчивости).
    • Организация команд: Позволяет строить автономные команды вокруг сервисов (Conway's Law).
  • Минусы:
    • Сложность распределенной системы: Появляются проблемы сетевых задержек, частичных отказов, необходимости idempotency, трассировки запросов, согласованности данных (часто eventual consistency).
    • Операционные накладные расходы: Требуется инфраструктура для оркестрации (Kubernetes), мониторинга, логирования, service discovery, API Gateway.
    • Сложность отладки и тестирования: Для отладки цепочки вызовов нужны распределенные трейсеры, а для тестирования — развертывание целого стека или моки.

Итог: Нет «серебряной пули». Начинать почти всегда стоит с монолита (или модульного монолита). Переход на микросервисы оправдан при реальной необходимости в независимом масштабировании компонентов, разных темпах изменений в разных частях системы или при работе нескольких крупных независимых команд.