Sobes.tech
Back to questions
Middle+
6

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

Companies where asked
OZONOZON

Answer from AI

sobes.tech AI

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

  1. Асинхронная обработка аналитики

    • Вместо того чтобы ждать ответа от сервиса аналитики в основном потоке обработки заказа, отправлять данные в очередь сообщений (например, Kafka, RabbitMQ).
    • Отдельный воркер или сервис будет читать из очереди и отправлять данные в аналитику.
  2. Буферизация и повторные попытки

    • Если сервис аналитики недоступен, данные остаются в очереди и повторяются попытки отправки.
  3. Обработка ошибок и мониторинг

    • Логировать ошибки отправки в аналитику.
    • Настроить алерты на длительные задержки или сбои.
  4. Декомпозиция сервисов

    • Разделить сервис заказа и сервис аналитики, чтобы сбои в аналитике не влияли на заказ.

Пример на Go с использованием канала для асинхронной отправки:

type Order struct {
    ID    string
    Items []string
}

var analyticsChan = make(chan Order, 100)

func createOrder(order Order) {
    // Обработка заказа
    // ...

    // Отправляем в аналитику асинхронно
    select {
    case analyticsChan <- order:
        // успешно отправлено в канал
    default:
        // канал переполнен, можно логировать или сохранять локально
    }
}

func analyticsWorker() {
    for order := range analyticsChan {
        // Отправка данных в сервис аналитики
        // Если ошибка, можно реализовать повторные попытки
    }
}

func main() {
    go analyticsWorker()
    // ...
}

Такой подход гарантирует, что создание заказа не зависит от состояния сервиса аналитики, и заказы не теряются.