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

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

Ответ

Монолитная архитектура (единое приложение):

  • Плюсы:
    • Простота разработки и развертывания: Один кодовая база, один процесс. Запуск node app.js — и всё работает.
    • Простая отладка и трассировка: Все вызовы происходят внутри одного процесса, стек вызовов цельный.
    • Согласованность данных: Использование транзакций БД в рамках одного приложения.
    • Низкие накладные расходы: Нет сетевых задержек между модулями.
  • Минусы:
    • Сложность масштабирования: Чтобы масштабировать одну «горячую» функцию, приходится масштабировать всё приложение.
    • Технологический стек: Вся команда привязана к одному стеку (например, Node.js).
    • Надежность: Падение одного модуля может «повалить» всё приложение.
    • Медленный CI/CD: Небольшое изменение требует пересборки и перезапуска всего монолита.

Микросервисная архитектура (набор независимых сервисов):

  • Плюсы:
    • Независимое масштабирование: Сервис аутентификации можно масштабировать отдельно от сервиса отчетов.
    • Гибкость технологий: Каждый сервис может быть написан на подходящем языке (хотя в Node.js-команде это редкость).
    • Устойчивость: Изоляция сбоев. Падение одного сервиса не обязательно приводит к остановке системы.
    • Независимые циклы разработки: Команды могут работать и выпускать свои сервисы автономно.
  • Минусы:
    • Высокая сложность: Требуются оркестрация (Kubernetes), service discovery, centralized logging, distributed tracing.
    • Сетевая задержка и надежность: Межсервисное взаимодействие по сети подвержено сбоям. Необходимы паттерны (retry, circuit breaker).
    • Сложность управления данными: Согласованность данных (distributed transactions) становится головной болью. Часто используется eventual consistency.
    • Сложность отладки: Требуются специальные инструменты для отслеживания запроса через цепочку сервисов.

Вывод: Стартап или небольшой продукт почти всегда начинается с монолита на Express.js/Fastify. Микросервисы — это эволюционная архитектура для больших, сложных систем, где преимущества перевешивают операционные издержки.