Ответ
Асинхронное взаимодействие — это паттерн обмена данными между микросервисами через сообщения или события, при котором отправитель не блокируется в ожидании немедленного ответа от получателя.
Как это работает:
- Сервис-издатель (Producer) отправляет сообщение в брокер (например, RabbitMQ, Apache Kafka, AWS SQS).
- Брокер гарантирует доставку и хранение сообщения.
- Сервис-подписчик (Consumer) обрабатывает сообщение, когда будет готов.
Преимущества перед синхронным (HTTP/RPC) подходом:
- Слабая связанность: Сервисы не знают друг о друге, общаясь только через контракт сообщения.
- Отказоустойчивость: Если сервис-получатель недоступен, сообщения накапливаются в очереди и будут обработаны после его восстановления.
- Буферизация нагрузки: Позволяет обрабатывать пиковые нагрузки без потери запросов.
- Масштабируемость: Потребителей можно легко масштабировать для параллельной обработки очереди.
Пример с использованием Kafka и Node.js:
// Producer (Сервис заказов)
await producer.send({
topic: 'order-created',
messages: [{
key: 'order-123',
value: JSON.stringify({ id: 123, total: 99.99 })
}]
});
// Consumer (Сервис уведомлений)
consumer.subscribe({ topic: 'order-created' });
consumer.run({
eachMessage: async ({ message }) => {
const order = JSON.parse(message.value.toString());
await sendEmailNotification(order); // Асинхронная обработка
}
});
Недостатки: Усложняется мониторинг и отладка сквозных бизнес-процессов, требуется управление идемпотентностью и порядком сообщений.