Throttling in messenger

Предпосылки

Поняли, что нужен троттлинг

  • Огромные выбросы по запросам от одного юзера (вплоть до 2k за 10 сек)
  • Пиковая нагрузка на базу данных
  • Возможность обезопаситься от ошибок наших клиентов
  • Простая защита от внешнего DOS-a *
  • Больше понимания как нас используют

Research

Остался в confluence

Как внедряли

  • Написали код
  • Включили в пассивном режиме
  • Подкрутили бакеты
  • Включили в активном режиме

Решение: Token Bucket

Решение: Token Bucket

  1. Используем шардированный Redis (4)
  2. Lua для алгоритма => 1 RTT
  3. 10 разных корзин + 1 дефолтная
  4. Троттлим по 10 секунд

Что увидели?

Выводы?

  • Срезали паразитный траффик
  • Починили несколько багов на клиентах
  • Чувствуем себя чуть в большей безопасности
  • Можем закручивать гайки дальше
Made with Slides.com