Найти в Дзене
Roman Pankov Tech

Rate Limiter в Go

Rate Limiter (ограничитель скорости) — это механизм контроля трафика, который ограничивает количество запросов или операций, которые пользователь или система может выполнить за определенный период времени. Принцип работы: каждому клиенту выделяется "квота" запросов (например, 100 запросов в минуту). Когда квота исчерпана, дополнительные запросы отклоняются с кодом 429 (Too Many Requests) до восстановления лимита. - Token Bucket — ведро с токенами, которое пополняется с постоянной скоростью - Leaky Bucket — ведро с дыркой, через которую запросы обрабатываются равномерно - Fixed Window — фиксированные временные окна с лимитом запросов - Sliding Window — скользящее окно для более точного контроля
Оглавление

Rate Limiter (ограничитель скорости) — это механизм контроля трафика, который ограничивает количество запросов или операций, которые пользователь или система может выполнить за определенный период времени.

Принцип работы: каждому клиенту выделяется "квота" запросов (например, 100 запросов в минуту). Когда квота исчерпана, дополнительные запросы отклоняются с кодом 429 (Too Many Requests) до восстановления лимита.

💡 Зачем нужен?

  • Защита от DDoS
  • Контроль нагрузки
  • Справедливое использование ресурсов

💡Основные алгоритмы rate limiting:

- Token Bucket — ведро с токенами, которое пополняется с постоянной скоростью

- Leaky Bucket — ведро с дыркой, через которую запросы обрабатываются равномерно

- Fixed Window — фиксированные временные окна с лимитом запросов

- Sliding Window — скользящее окно для более точного контроля

🛠 Простой пример: Rate Limiter — 1 запрос в 200 миллисекунд:

-2

📦 Готовые решения

  • golang.org/x/time/rate — встроенная
  • github.com/ulule/limiter — с Redis/Memcached