Sobes.tech
Назад к вопросам
Senior
4

На примере создания заказа. Есть запрос на сервис и есть ответ, между этими двумя действиями межсервисная и внешняя товары которые описаны (например для подсчета популярности товаров). Сервис выполняет неоднократно работает медленно или вовсе таймаутит и мы не успеваем ответить, теряем заказ. Что делать, что бы перестать терять заказы, и деньги соответственно?

Компании, где спрашивали
Ozon ФинтехOzon Финтех

Ответ от нейросети

sobes.tech AI

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

Основные подходы:

  1. Использование очередей сообщений (например, Kafka, RabbitMQ). Вместо того, чтобы ждать ответа от внешних сервисов, заказ помещается в очередь, и сервис сразу подтверждает прием заказа. Обработка заказа происходит асинхронно, что исключает потерю из-за таймаутов.

  2. Идём по паттерну "Event Sourcing" или "CQRS" — запись события создания заказа в журнал, а затем асинхронная обработка и обновление состояния.

  3. Реализация механизма повторных попыток (retry) и отложенной обработки (dead-letter queue) для обработки неудачных сообщений.

  4. Мониторинг и алерты — чтобы быстро реагировать на сбои.

Пример на Java с использованием Kafka (упрощённо):

// Отправка заказа в Kafka
producer.send(new ProducerRecord<>("orders", orderId, orderData));
// Сервис сразу отвечает клиенту, что заказ принят

Таким образом, заказ не теряется, даже если внешние сервисы работают медленно или недоступны.