Инфраструктура

Token bucket или sliding window: как выбрать алгоритм rate limiting

Три алгоритма решают одну задачу по-разному — и выбор влияет на то, как ваш API будет вести себя именно во время всплесков нагрузки.

Fixed window

Простейший вариант: счётчик обнуляется в начале каждого интервала (например, каждую минуту). Проблема — на границе окон возможен двойной всплеск: клиент может отправить лимит запросов в конце одной минуты и снова весь лимит в начале следующей.

Sliding window

Учитывает запросы за скользящий интервал, а не за фиксированные границы — сглаживает проблему двойного всплеска ценой немного большей вычислительной сложности. Это алгоритм, который использует Hexly по умолчанию.

Token bucket

Каждому клиенту выделяется «ведро» токенов, которое пополняется с постоянной скоростью. Запрос тратит токен; если токенов нет — запрос отклоняется. Хорошо подходит, когда нужно разрешить контролируемые всплески (burst) поверх средней скорости.

Что выбрать

Если API используется в основном равномерно (например, фоновая синхронизация) — подойдёт sliding window. Если трафик по природе всплесковый (пользователь кликает несколько раз подряд) — token bucket с настроенным burst даёт лучший пользовательский опыт без ослабления защиты от злоупотреблений.

← Предыдущая

Пять ошибок при проектировании вебхуков

Следующая →

Идемпотентные ключи

Хотите так же надёжно у себя?

Начните с бесплатного плана и подключите первый маршрут за 5 минут.