Вопрос проверяет знание стандартных протоколов и технологий, используемых для прямого вызова сервисов.
Синхронное взаимодействие чаще всего реализуется через HTTP-запросы.
Наиболее распространены REST и gRPC.
Также иногда используется прямое взаимодействие через RPC или базы данных, но это считается плохой практикой.
Выбор способа зависит от требований к скорости, контрактам и совместимости.
Синхронное взаимодействие предполагает, что один сервис напрямую вызывает другой и ожидает ответ. На практике это реализуется несколькими основными способами.
Это самый распространённый вариант.
Основные характеристики:
Использует HTTP
Передача данных чаще всего в JSON
Чёткая модель запрос–ответ
Пример:
GET /users/42 HTTP/1.1
Host: user-service
Плюсы:
Простота
Читаемость
Хорошо поддерживается инфраструктурой
Минусы:
Относительно высокая задержка
Нет строгих контрактов на уровне протокола
Определение:
gRPC — это высокопроизводительный RPC-фреймворк поверх HTTP/2.
Ключевые особенности:
Использует бинарный протокол
Строгие контракты через .proto
Поддержка стриминга
Пример вызова (идея):
user = user_stub.GetUser(UserRequest(id=42))
Плюсы:
Высокая производительность
Контракты на уровне схемы
Минусы:
Сложнее в отладке
Менее удобен для внешних API
Иногда встречается в легаси-системах.
Особенности:
Минимальные накладные расходы
Жёсткая связность сервисов
Сложность сопровождения
REST — стандарт де-факто для синхронных API.
gRPC выбирают, когда важны скорость и строгие контракты.
Прямой RPC используется редко и осознанно.