awesome-everything EN
↑ Обратно к восхождению

API

Rate limiting: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту rate limiting — компромиссы алгоритмов, граничный всплеск, распределённые счётчики, атомарность и контракт 429.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

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

Цель

Убедись, что связываешь выбор алгоритма, поведение всплесков, ловушку распределённого счётчика, атомарность и контракт 429 — тот синтез, к которому вёл урок.

Викторина

Лимит 100/мин на fixed window с ключом {key}:{minute}. Сколько запросов клиент в худшем случае легально уложит в промежуток ~1 секунда и почему?

Викторина

Публичный API обслуживает бёрстовых браузерных клиентов — загрузка страницы выстреливает ~12 запросов разом, затем простой. Нужен честный средний rate, терпящий эти бёрсты загрузки. Какой алгоритм подходит лучше?

Викторина

In-memory лимитер проходит все тесты на ноутбуке, но в production трафик идёт сильно выше настроенных 100/мин. За балансировщиком четыре app-ноды. Корневая причина?

Викторина

Ты переносишь счётчик в Redis и реализуешь как INCR, затем EXPIRE. Почему единый Lua-скрипт — более надёжный паттерн?

Викторина

Сервис аутентификации должен держать точный пер-аккаунт лимит ради compliance — без граничного зазора, каждая попытка учтена. Какой алгоритм и какую цену ты принимаешь?

Викторина

На fixed window ты отклоняешь с 429 и жёстким Retry-After 30 секунд. На следующей границе окна error rate снова взлетает. Что произошло и какой фикс?

Итог

Сквозная линия: то, как запросы попадают в окна, — это где fixed window протекает 2x граничным всплеском; sliding window log покупает точность памятью на запрос, sliding counter аппроксимирует её за два integer, а token bucket моделирует всплески как настраиваемый capacity. Ничего из этого не реально, если счётчик живёт в пер-нодовой памяти — раздели его в Redis, сделай read-decide-update атомарным через Lua, а отклоняя — соблюдай контракт: 429 + Retry-After в delta-seconds плюс jitter, чтобы граница сброса не стала thundering herd.

Продолжить восхождение ↑Rate limiting: тест на свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.