middle
Какие способы взаимодействия микросервисов существуют?
Взаимодействие микросервисов делится на два основных типа: синхронное (Request-Response) и асинхронное (Event-Driven).
Синхронное взаимодействие (Request-Response)
- REST (HTTP) — наиболее распространённый способ. Простой, основан на стандартах HTTP.
- gRPC — бинарный протокол на основе Protocol Buffers. Быстрее REST, поддерживает стриминг.
- GraphQL — гибкие запросы, клиент сам определяет структуру ответа.
Асинхронное взаимодействие (Event-Driven)
- Message Brokers (Kafka, RabbitMQ) — сервис публикует события, подписчики обрабатывают.
- Event Streaming (Apache Kafka) — поток событий с возможностью повторного чтения.
| Критерий | Синхронное | Асинхронное |
|---|---|---|
| Связность | Временная связность (оба сервиса должны быть доступны) | Слабая связность |
| Latency | Суммируется по всей цепочке | Не блокирует вызывающую сторону |
| Сложность | Простая реализация | Сложнее (idempotency, ordering) |
| Отладка | Проще (request-response) | Сложнее (асинхронные цепочки) |
| Надёжность | Ниже (cascade failures) | Выше (буферизация в брокере) |
Рекомендации
- Для операций, требующих немедленного ответа (запрос баланса) — синхронное взаимодействие.
- Для операций, допускающих задержку (отправка уведомления после платежа) — асинхронное.
- В банковских системах предпочтительно асинхронное взаимодействие, так как оно обеспечивает лучшую отказоустойчивость.
Пример
Синхронное: Асинхронное:
A ──REST──► B A ──event──► Kafka ──event──► B
A ◄─resp.── B (A не ждёт B)
На собеседовании: покажите, что понимаете, когда какой способ применять. Ключевой критерий — нужен ли немедленный ответ. Частая ошибка — забыть упомянуть temporal coupling в синхронном взаимодействии.