Проверяет понимание защиты сервисов от перегрузки.
Чаще всего используется алгоритм Token Bucket. Клиент может выполнять запросы, пока есть доступные токены.
Rate limiting нужен чтобы:
защищать сервис;
ограничивать злоупотребления;
предотвращать перегрузку.
Самый популярный алгоритм - Token Bucket.
Идея:
есть ведро токенов;
токены постепенно добавляются;
каждый запрос потребляет токен.
Если токенов нет:
запрос отклоняется.
Пример через пакет:
import "golang.org/x/time/rate"
limiter := rate.NewLimiter(10, 20)Здесь:
10 запросов в секунду;
burst до 20 запросов.
В распределённой системе лимитер часто хранится в Redis.
Вывод:
Rate limiter является одним из базовых механизмов защиты API.