0

Я пытаюсь постоянно сканировать большой объем информации с сайта с помощью REST api, который они предоставляют. У меня после constraints-Как я могу запланировать или поставить очереди на вызовы api для поддержания лимита скорости?

  1. пребывание в пределах лимита API (5 вызовов/сек)
  2. ПРИМЕНЯТЬ полный предел (делая ровно 5 вызовов в секунду, 5 * 60 звонков в минуту)
  3. Каждый вызов будет с различными параметрами (PARAMS будет выбрано из БД или в памяти кэш)
  4. вызовы будут сделаны из AWS EC2 (или GAE) и обработанные данные будут сохранены в AWS RDS/DynamoDB

на данный момент я я просто использую запланированную задачу, без скрипта python каждую минуту, а сценарий выполняет 10-20 api calls-> процессов response-> хранит данные в DB. Я хочу масштабировать эту процедуру (сделать 5 * 60 = 300 вызовов в минуту) и сделать ее управляемой с помощью кода (нажатие новых задач, пауза/возобновление их легко, мониторинг сбоев, изменение частоты вызовов).

Мой вопрос - какие лучшие доступные инструменты для этого? Любое предложение/руководство/ссылка оценены.

Я знаю имена некоторых рамок очереди задач, таких как Celery/RabbitMQ/Redis, но я мало знаю о них. Однако я с удовольствием изучаю один или каждый из них, если это лучшие инструменты для решения моей проблемы, хочу услышать от ветеранов SO, прежде чем прыгать в ☺
Также, пожалуйста, дайте мне знать, есть ли какая-либо другая служба AWS, которую я должен использовать (SQS или AWS Data Pipeline?), Чтобы сделать любой шаг проще.

ответ

1

Вам не нужно добавлять внешнюю зависимость только для ограничения скорости, так как ваш прецедент довольно прост.

Я могу думать о двух вариантах:

  • Измените сценарий (который в настоящее время просыпается каждую минуту и ​​делает 10-20 API вызовов), чтобы просыпаться каждый второй и сделать 5 вызовов (последовательно или параллельно) ,
    • В вашем текущем проекте ваши вызовы API могут быть неправильно распределены в течение 1 минуты, то есть вы можете совершать все ваши 10-20 звонков в первый, скажем, 20 секунд.
    • Если вы меняете этот сценарий на выполнение каждую секунду, ваш коэффициент обработки API будет более сбалансированным.
  • Измените свой скрипт Python на длинный демон и используйте библиотеку ограничения скорости, такую ​​как this. Вы можете настроить последнее, чтобы сделать 1 вызов за х секунд.