Token Bucket хранит запас токенов до ёмкости B и пополняет его со скоростью r. Запрос расходует токен: если его нет, запрос отклоняют или откладывают, ограничивая средний поток и всплески.
Как защитить публичный эндпоинт от перегрузки (rate limiting) с помощью алгоритма Token Bucket?
Token Bucket хранит запас токенов до ёмкости B и пополняет его со скоростью r. Запрос расходует токен: если его нет, запрос отклоняют или откладывают, ограничивая средний поток и всплески.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Token Bucket хранит запас токенов до ёмкости B и пополняет его со скоростью r. Запрос расходует токен: если его нет, запрос отклоняют или откладывают, ограничивая средний поток и всплески.
При запросе вычисляют tokens = min(B, tokens + r * elapsed), затем атомарно проверяют и уменьшают баланс. Ключ лимита выбирают по пользователю, API-ключу или сочетанию признаков; один IP плохо различает пользователей за NAT. Для нескольких экземпляров нужен общий атомарный счётчик или распределённая схема с оговорённой точностью. Возвращайте 429 и понятное время повтора. Лимит не заменяет ограничение параллельных тяжёлых операций, размера запроса и таймаутов; отдельно определите поведение при отказе хранилища лимитов.