11 / 15
Как спроектировать сервис ограничения скорости запросов?
Ограничитель стоит на входе и решает по ключу (пользователь, токен, IP, маршрут), пропустить запрос или ответить 429. Практичный алгоритм — token bucket: он допускает короткие всплески в пределах ёмкости и при этом держит среднюю скорость; скользящее окно точнее, но дороже по памяти. Счётчики живут в общем хранилище, иначе каждый инстанс считает свой лимит и суммарный оказывается кратно больше. Ключевая оптимизация — двухуровневая схема: локальный счётчик в процессе гасит основную массу запросов, а общее хранилище синхронизирует лимит с небольшой погрешностью. Главный вопрос интервью — что делать при недоступности хранилища: пропускать всех (fail-open) и рисковать перегрузкой или отклонять (fail-closed) и ронять продукт.