Throttling (rate limiting) в Мессенджере

С чего все началось

Что мы сделали дальше

  • Посмотрели кол-во вызовов различных методов одним юзером за 10 секунд
  • То же самое за минуту
  • Посмотрели общее кол-во вызовов от юзера за 10 сек и минуту
  • Посмотрели распределение по количеству коннектов от юзера

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

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

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

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

Ресерч подходов к троттлингу

Решение: Token Bucket

Решение: Token Bucket

  • С помощью Redis и Lua
  • Троттлим по интервалу 10 секунд
  • 9 корзин с различными лимитами
  • Текущие лимиты отсекают выбросы
  • Сейчас в пассивном режиме

Что видим?

Что видим?

Что видим?

Что видим?

Что видим?

Что дальше?

  • Включаем активный троттлинг на процент
  • Ждем какое-то время
  • Включаем на 100%
  • Закручиваем гайки?
  • Работаем над защитой дальше (connections limit)

demo throttling

By Emelin Alexander

demo throttling

  • 982