Три интервала задержки для трех API

В апреле я разработал ETL-конвейеры для трех каталожных сайтов. Каждый сайт использует свой API: Steam, GitHub и HuggingFace.

Мне пришлось установить интервалы задержки (sleep intervals) для каждого из них. Значения, режимы сбоев и способы обработки ошибок везде разные. Вот что я использую и почему.

Steam: задержка 250 мс

Документация Steam мало что говорит об ограничениях частоты запросов (rate limits). Данные сообщества указывают примерно на 200 запросов каждые 5 минут на один IP. Это означает, что интервал в 1,5 секунды будет безопасным.

Вместо этого я использую 250 мс. Моя ночная задача обрабатывает всего 60 записей об играх. При задержке 250 мс общее время ожидания составляет 15 секунд. При 1,5 секундах оно вырастает до 90 секунд. Экономия времени важна, когда вы обрабатываете несколько сайтов.

Если Steam возвращает ошибку, задача не останавливается. Она записывает ошибку в лог и переходит к следующему элементу. Данные обновятся следующей ночью.

GitHub: задержка 100 мс

У GitHub всё предельно ясно. Неавторизованным пользователям доступно 60 запросов в час. Пользователям с токеном — 5 000 запросов в час.

Я использую задержку в 100 мс в качестве меры «вежливости». Основную работу по соблюдению лимитов выполняет токен. Мой конвейер использует основной REST API, а не search API. Это позволяет достичь гораздо более высоких лимитов.

HuggingFace: без задержки

За недели ночных запусков я ни разу не столкнулся с ограничением частоты запросов. Registry API разработан специально для инструментов пакетной обработки, подобных моему.

Я запрашиваю до 100 моделей за один раз. Я использую токен аутентификации, чтобы еще больше повысить лимиты. Для 100 моделей отсутствие задержки — самое простое решение.

Сводная таблица:

• Steam: задержка 250 мс. Некритичные ошибки. • GitHub: задержка 100 мс. Некритичные ошибки. • HuggingFace: без задержки. Некритичные ошибки.

Интервал задержки — это лишь предположение. Настоящая защита заключается в том, как я обрабатываю ошибки. Каждый вызов API обернут в блок try/catch. Если вызов не удается, система записывает резервную строку (fallback row) вместо того, чтобы аварийно завершиться.

Интервал задержки определяет, как часто вы достигаете лимита. Обработка ошибок определяет, что происходит, когда вы его достигаете.

Источник: https://dev.to/morinaga/three-sleep-intervals-for-three-apis-steam-250ms-github-100ms-huggingface-none-4ga7

Дополнительное обучающее сообщество: https://t.me/GyaanSetuAi