Перед отправкой атомарно резервируйте слот в счётчике «домен + минутное окно». Если лимит исчерпан, отложите URL до следующего окна, не отправляя запрос заранее.
Спроектируйте ограничение запросов по RPM для URL из очереди: лимит задаётся отдельно для каждого домена и считается в фиксированных минутных окнах. Как не превышать лимиты?
Перед отправкой атомарно резервируйте слот в счётчике «домен + минутное окно». Если лимит исчерпан, отложите URL до следующего окна, не отправляя запрос заранее.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Перед отправкой атомарно резервируйте слот в счётчике «домен + минутное окно». Если лимит исчерпан, отложите URL до следующего окна, не отправляя запрос заранее.
Все workers должны использовать один лимитер или согласованное хранилище. Проверка и увеличение счётчика выполняются одной операцией, например Lua-скриптом; время окна лучше брать у общего источника. Повторы и перенаправления на другой домен тоже учитываются по контракту. После резервирования отправляйте сразу: долго отложенный запуск может попасть в другое окно. Фиксированные окна допускают всплеск около границы двух минут — это свойство выбранного алгоритма, а не rolling RPM.