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

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

Ответ

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

Ключевые принципы:

  • Организация вокруг бизнес-возможностей: Сервис отвечает за одну доменную область (например, «Управление заказами», «Аутентификация»).
  • Независимое развертывание: Каждый сервис можно разрабатывать, тестировать и выкатывать независимо от других.
  • Децентрализованное управление данными: У каждого сервиса своя база данных или схема. Предпочтительна база данных на сервис (Database per Service).
  • Устойчивость к отказам: Система должна оставаться работоспособной при сбое одного из сервисов.

Пример архитектуры интернет-магазина:

[Клиент] <-> [API Gateway] <-> [Сервис пользователей] (PostgreSQL)
                              <-> [Сервис каталога]    (MongoDB)
                              <-> [Сервис заказов]     (PostgreSQL)
                              <-> [Сервис оплаты]      (Внешний API)

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

  • Масштабируемость: Можно масштабировать только «узкие» сервисы.
  • Гибкость технологий: Для разных сервисов можно использовать разные языки и СУБД.
  • Устойчивость: Изоляция сбоев.

Сложности:

  • Распределённые транзакции: Требуют паттернов (Saga, CQRS).
  • Мониторинг и отладка: Необходима комплексная инфраструктура (логи, трассировка).
  • Сетевая задержка: Множество сетевых вызовов между сервисами.