我正在尝试使用它们提供的REST API从站点不断地爬网。我有以下约束 -
- 保持在API限制(5个电话/秒)
- 使用全部限制(每秒恰好拨打5个电话,每分钟5*60个电话)
- 每个呼叫将带有不同的参数(参数将从DB或内存中缓存获取)
- 呼叫将由AWS EC2(或GAE)进行,并且处理后的数据将存储在AWS RDS/DynamoDB 中
目前,我只是在每分钟使用一个计划的任务,该任务每分钟都运行Python脚本,并且该脚本可以使10-20个API调用 -> Process-> Process-响应 ->将数据存储到DB。我想扩展此过程(每分钟进行5*60 = 300个电话),并通过代码使其可管理(推动新任务,暂停/恢复它们,监视失败,更改呼叫频率)。
我的问题是 - 实现这一目标的最佳工具是什么?感谢任何建议/指导/链接。
我确实知道某些任务排队框架的名称,例如芹菜/兔子/雷迪斯,但我对它们不了解。但是,如果这些是解决我的问题的最佳工具,我正在学习一个或每一个,想在跳跃之前从So退伍军人那里听到
另外,请告诉我是否应该使用其他AWS服务(SQS或AWS Data Pipeline?),以使任何步骤更容易。
您不需要添加外部依赖性,因为您的用例很简单。
我可以想到两个选择:
- 修改脚本(当前每分钟醒来,并进行10-20个API调用)以每秒醒来并进行5个调用(依次或并行)。
- 在您当前的设计中,您的API呼叫可能无法在1分钟内正确分布,即,您可能会在第一个10-20秒钟进行所有10-20个呼叫,例如20秒。
- 如果将脚本更改为每秒运行,您的API呼叫率将更加平衡。
- 将您的Python脚本更改为长期运行的守护程序,并使用速率限制器库,例如。您可以将后者配置为每x秒1个呼叫。