Что такое асинхронное взаимодействие в микросервисной архитектуре?

«Что такое асинхронное взаимодействие в микросервисной архитектуре?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Асинхронное взаимодействие — это паттерн обмена данными между микросервисами через сообщения или события, при котором отправитель не блокируется в ожидании немедленного ответа от получателя.

Как это работает:

  1. Сервис-издатель (Producer) отправляет сообщение в брокер (например, RabbitMQ, Apache Kafka, AWS SQS).
  2. Брокер гарантирует доставку и хранение сообщения.
  3. Сервис-подписчик (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); // Асинхронная обработка
  }
});

Недостатки: Усложняется мониторинг и отладка сквозных бизнес-процессов, требуется управление идемпотентностью и порядком сообщений.