Ответ
Микросервисная архитектура — это стиль проектирования приложения как набора слабо связанных, независимо развертываемых сервисов, каждый из которых реализует конкретную бизнес-возможность и общается с другими по сети через стандартные протоколы (чаще HTTP/REST или gRPC).
Ключевые принципы:
- Организация вокруг бизнес-возможностей: Сервис отвечает за одну доменную область (например, «Управление заказами», «Аутентификация»).
- Независимое развертывание: Каждый сервис можно разрабатывать, тестировать и выкатывать независимо от других.
- Децентрализованное управление данными: У каждого сервиса своя база данных или схема. Предпочтительна база данных на сервис (Database per Service).
- Устойчивость к отказам: Система должна оставаться работоспособной при сбое одного из сервисов.
Пример архитектуры интернет-магазина:
[Клиент] <-> [API Gateway] <-> [Сервис пользователей] (PostgreSQL)
<-> [Сервис каталога] (MongoDB)
<-> [Сервис заказов] (PostgreSQL)
<-> [Сервис оплаты] (Внешний API)
Преимущества:
- Масштабируемость: Можно масштабировать только «узкие» сервисы.
- Гибкость технологий: Для разных сервисов можно использовать разные языки и СУБД.
- Устойчивость: Изоляция сбоев.
Сложности:
- Распределённые транзакции: Требуют паттернов (Saga, CQRS).
- Мониторинг и отладка: Необходима комплексная инфраструктура (логи, трассировка).
- Сетевая задержка: Множество сетевых вызовов между сервисами.