Вопрос проверяет кругозор кандидата и понимание альтернативных моделей взаимодействия между сервисами.
Помимо REST и gRPC существуют асинхронные и событийные способы взаимодействия. Часто используются очереди сообщений и pub/sub модели. Также применяются WebSocket, GraphQL и обмен через файлы или стримы. Выбор подхода зависит от требований к задержкам и надёжности. В реальных системах часто комбинируют несколько способов.
Межсервисное взаимодействие не ограничивается синхронными HTTP-вызовами.
Разные способы коммуникации решают разные задачи — универсального варианта не существует.
Перед применением важно понимать их назначение:
Message Queue
асинхронное взаимодействие
гарантированная доставка
слабая связность сервисов
Pub/Sub
рассылка событий нескольким подписчикам
реактивная архитектура
отсутствие знания о получателях
WebSocket
постоянное соединение
двусторонний обмен
низкая задержка
Event Streaming
упорядоченный поток событий
replay сообщений
обработка в реальном времени
GraphQL
запрос только нужных данных
единая точка входа
гибкие схемы запросов
Асинхронный подход вместо прямого вызова:
publish_event(
topic="order.created",
payload={"order_id": 123}
)
Несколько сервисов могут независимо обработать это событие.
Чем выше нагрузка и требования к надёжности, тем чаще используются асинхронные и событийные модели вместо REST.