Как я могу планировать или ставить в очередь вызовы API для поддержания ограничения скорости?

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

  1. Не выходить за пределы API (5 вызовов/сек)
  2. Использование полного лимита (совершение ровно 5 звонков в секунду, 5*60 звонков в минуту)
  3. Каждый вызов будет с разными параметрами (параметры будут извлекаться из БД или кеша в памяти)
  4. Вызовы будут выполняться из AWS EC2 (или GAE), а обработанные данные будут храниться в AWS RDS/DynamoDB.

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

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

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


person AsifM    schedule 19.06.2016    source источник


Ответы (1)


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

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

  • Modify the script (that currently wakes up every minute and makes 10-20 API calls) to wake up every second and make 5 calls (sequentially or in parallel).
    • In your current design, your API calls might not be properly distributed across 1 minute, i.e. you might be making all your 10-20 calls in the first, say, 20 seconds.
    • Если вы измените этот скрипт на запуск каждую секунду, частота вызовов вашего API будет более сбалансированной.
  • Измените свой скрипт Python на долго работающий демон и используйте библиотеку ограничения скорости, например эту. Вы можете настроить последний так, чтобы он совершал 1 вызов в x секунд.
person ketan vijayvargiya    schedule 20.06.2016