2

Aws 批处理在一个阵列中最多支持10000 个作业。但是,如果每个作业都写入 DynamoDb 会怎样?在这种情况下需要控制速率。怎么做?是否有设置只保持 N 个作业处于运行状态而不启动其他作业?

4

1 回答 1

1

最简单的方法是将 DyanmoDB 作业发送到 SQS 队列,并让工作人员/lambda 以您指定的速率轮询此队列。这是 AWS 世界中速率限制的经典方法。我会计算这应该是容量单位的速率,并根据队列轮询速率相应地配置表的容量。

请记住,您可能有其他进程访问您的 DynamoDB,用尽了您的表的容量,并注意您设置的队列的保留时间。通过为读取作业实施的一些缓存,您可能会在速度和成本方面受益匪浅,请查看 DAX。

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

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

于 2018-05-14T06:33:02.293 回答