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

Можно ли сразу поставить reject объявлению, если быстрый сервис уже вернул reject, не дожидаясь медленного ML-сервиса антифрода?

Компании, где спрашивали
КасперскийКасперский

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

sobes.tech AI

Да, можно сразу отклонить (reject) запрос, если быстрый сервис антифрода вернул отказ, не дожидаясь результата медленного ML-сервиса.

Это распространённый подход для оптимизации времени отклика и ресурсов:

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

В Go это можно реализовать с помощью каналов и контекстов, отменяя ожидание результата медленного сервиса при получении отказа от быстрого.

Пример:

fastResult := make(chan bool)
slowResult := make(chan bool)

// Запускаем быстрый сервис
go func() {
    fastResult <- fastAntiFraudCheck()
}()

// Запускаем медленный ML-сервис
go func() {
    slowResult <- slowMLCheck()
}()

select {
case fastOk := <-fastResult:
    if !fastOk {
        // reject сразу
        return reject()
    }
    // ждем slowResult или продолжаем
case slowOk := <-slowResult:
    if !slowOk {
        return reject()
    }
}

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