Как мы держим p95 приёма на уровне 24 мс
Приём событий кажется простой задачей, пока поток не становится неравномерным. Разбираем, что именно даёт стабильные 24 мс.
На графиках приём событий выглядит ровной линией. В реальности это набор всплесков: мобильные клиенты просыпаются одновременно, рекламные кампании стартуют в полночь, а cron-задачи — в начале часа.
Три источника задержки
- Очередь на входе: чем больше соединений, тем дороже установка.
- Валидация: проверка схемы на каждом событии — самая горячая точка.
- Запись в приёмник: сетевые таймауты и ретраи.
Мы разнесли эти этапы по разным пулам и перестали ставить валидацию в горячий путь. Схема проверяется один раз при подключении источника, а на событии остаётся быстрая проверка типов.
Стабильность p95 — это не про железо, а про то, сколько работы мы делаем на каждом этапе.
Что ещё помогло
Ограничение скорости на источник и отдельная очередь для «тяжёлых» событий. Если источник присылает много крупных сообщений, он не тормозит остальных.
Сейчас p95 держится на 24 мс при 214 млрд событий в сутки. Следующая цель — 15 мс без роста стоимости.