Вопрос проверяет знание способов коммуникации между микросервисами, включая синхронные и асинхронные протоколы передачи данных.
Для коммуникации микросервисов используются синхронные (REST, gRPC) и асинхронные (Kafka, RabbitMQ, NATS) транспорты. Синхронные требуют immediate response, асинхронные используют message brokers для декаплингования сервисов.
Коммуникация между микросервисами — критический аспект распределенных систем. Существует два основных подхода:
Синхронная коммуникация:
Клиент ожидает immediate response от сервиса
REST/HTTP — простой, человекочитаемый, на основе HTTP
gRPC — высокопроизводительный, бинарный, на основе HTTP/2
Подходит для request-response сценариев
Асинхронная коммуникация:
Сервисы обмениваются сообщениями через брокер
Kafka — высокопроизводительный, persistence, replayability
RabbitMQ — AMQP, гибкая маршрутизация, acknowledged delivery
NATS — легковесный, high-throughput, persistence optional
Подходит для event-driven архитектур
Примеры использования:
// Синхронный REST вызов
axios.get('http://user-service/users/123')
// Асинхронная отправка сообщения
kafkaProducer.send({
topic: 'order-created',
messages: [{ value: JSON.stringify(order) }]
})Выбор транспорта зависит от:
Требований к производительности
Необходимости гарантированной доставки
Сложности реализации
Требований к масштабируемости