1 мин на чтение

Платформа раннего прогнозирование аварий

На площадке DSP, где идут аукционы в реальном времени, мы заметили странный паттерн: в пике один из крупных участников торгов перестаёт слать биды, а нагрузка на инфраструктуру не падает — наоборот, растёт.

Гипотеза

Если участник «выпадает» не полностью, а остаётся полуактивным (таймауты, ретраи), остальные узлы получают больше повторных запросов и хуже отрабатывают дедлайны аукциона. Система становится нежизнеспособной не от абсолютного QPS, а от перераспределения нагрузки.

Я сформулировал гипотезу, согласовал с платформенной командой, провёл контролируемый эксперимент на стейдже: искусственно урезали долю бидов одного sandbox-участника. Картина совпала с прод-инцидентом неделей ранее.

Решение

Написал отдельный сервис на FastAPI:

  • стрим метрик из Kafka (bid rate, timeout rate, p99 latency по participant_id);
  • скользящее окно и z-score по отклонению от базовой линии;
  • алерт в Slack и webhook в оркестратор, если порог держится 3–5 минут;
  • горизонт предупреждения — до 15 минут до прогнозируемого отказа по эвристике «тренд + запас по CPU».

На дашборде (фрагмент на промо-картинке) видно те же всплески, которые раньше замечали постфактум: резкий пик около 18:30, потом откат. Теперь такой пик сопровождается тикетом до того, как дежурный открывает Grafana сам.

Итог

Детектор не чинит торги — он даёт время переключить флаги, ограничить fan-out, позвонить партнёру. Главный урок: в RTB сначала проверяй гипотезу измерением, потом пиши код. Иначе получишь красивый микросервис, который алертит на шум.