Короткий ответ
Rate limiting ограничивает число запросов от клиента/сервиса за период времени, чтобы защитить backend от перегрузки; token bucket допускает кратковременные всплески в пределах накопленных токенов, leaky bucket сглаживает всплески в равномерный поток.
Как это работает подробнее
Token bucket пополняет «ведро» токенов с фиксированной скоростью до максимума, и каждый запрос тратит токен; leaky bucket обрабатывает запросы с постоянной фиксированной скоростью без накопления запаса на будущее.
Что использовать на практике
- Практика. Token bucket применяют, когда допустимы кратковременные всплески при соблюдении среднего лимита; leaky bucket — когда важна строго равномерная скорость обработки; лимиты применяют на API gateway или распределённо через Redis.
Подводные камни
- Риск. Применять лимит только локально на каждом инстансе без координации (при N инстансах фактический лимит умножается на N); не возвращать клиенту 429 и Retry-After.