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