如何在AWS批处理中控制并行作业运行?

时间:2018-05-14 06:05:30

标签: amazon-web-services amazon-dynamodb aws-batch

在一个数组中批量处理supports最多10000个作业。但是,如果每个作业写入DynamoDb怎么办?在这种情况下需要控制率。怎么做?是否有设置仅将N作业保持在运行状态而不启动其他作业?

1 个答案:

答案 0 :(得分:1)

最简单的方法是将DyanmoDB作业发送到SQS队列,并让worker / lambdas以您指定的速率轮询此队列。这是AWS世界中限速率的经典方法。我会做一些关于容量单位的比率和配置表格的计算。相应的容量与队列轮询率。

请注意,您可能有其他进程使用您的表的容量访问您的DynamoDB,并注意您设置的队列的保留时间。通过为读取作业实现一些缓存,您可能会以极快的速度和成本获益,请查看DAX。

修改只是为了解决您的意见。因此,如果您的表有20个单位,如果每个作业在1秒内使用2个单位,则每秒只能执行10个作业。假设您提交10,000个工作,每秒10个工作,处理所有这些工作将需要1,000秒。但是,如果您提交的作业超过3,456,000个,那么每秒处理10个作业需要4天以上的时间。 SQS的默认保留时间为4天,因此您将开始以此速率丢失邮件/作业。

正如我所提到的,您可以使用其他进程来访问您的桌面,这可能会超过20个单位,因此在接近表格限制时您需要非常小心。