Что такое микросервисная архитектура?

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

Ответ

Микросервисная архитектура (MSA) — это стиль проектирования приложения как набора независимо развертываемых сервисов, каждый из которых реализует одну бизнес-возможность и взаимодействует по легковесным протоколам (чаще всего HTTP/REST, gRPC).

Ключевые характеристики:

  1. Организация вокруг бизнес-возможностей: Сервисы строятся вокруг доменных понятий (например, «Заказы», «Оплата», «Доставка»), а не технических слоев.
  2. Автономность:
    • У каждого сервиса своя кодовая база и цикл разработки.
    • Самостоятельное развертывание и масштабирование.
    • Возможность использовать разные технологии и СУБД.
  3. Децентрализованное управление данными: Каждый сервис управляет своей собственной схемой БД. Согласованность данных обеспечивается через механизмы Saga, CQRS или события.

Пример структуры:

Монолит: [UI][Бизнес-логика][Данные]

Микросервисы:
[Сервис Пользователей] <---> [API Gateway] <---> [Сервис Заказов]
       |                            |                     |
    [СУБД 1]                    [Сервис Оплат]       [СУБД 2]
                                     |
                                  [СУБД 3]

Преимущества:

  • Гибкость и скорость: Команды работают независимо.
  • Масштабируемость: Можно масштабировать только «узкие» места.
  • Отказоустойчивость: Падение одного сервиса не обрушивает всю систему.
  • Технологическая гетерогенность.

Недостатки и сложности:

  • Распределенные транзакции.
  • Сложность отладки и мониторинга (необходим centralized logging, tracing).
  • Накладные расходы на межсервисную коммуникацию.
  • Усложнение процесса развертывания и DevOps.