Amazon web services 周期性任务每30分钟处理存储在DynamoDB中的80k个任务
我一直在研究如何实现一个循环任务来处理dynamoDB中存储的大量项目。在线进行一些研究后,其中一个选项涉及使用CloudWatch事件每30分钟触发一个事件,然后该事件触发lambda A,lambda然后读取所有项目,将其发布到SQS,并让多个lambda B实例从SQS消费并并行处理它们。(处理时间约为200毫秒) 但问题是lambda有15分钟的时间限制,一次从DynamoDB读取所有80k任务似乎是不可行的Amazon web services 周期性任务每30分钟处理存储在DynamoDB中的80k个任务,amazon-web-services,aws-lambda,cron,amazon-dynamodb,amazon-cloudwatch,Amazon Web Services,Aws Lambda,Cron,Amazon Dynamodb,Amazon Cloudwatch,我一直在研究如何实现一个循环任务来处理dynamoDB中存储的大量项目。在线进行一些研究后,其中一个选项涉及使用CloudWatch事件每30分钟触发一个事件,然后该事件触发lambda A,lambda然后读取所有项目,将其发布到SQS,并让多个lambda B实例从SQS消费并并行处理它们。(处理时间约为200毫秒) 但问题是lambda有15分钟的时间限制,一次从DynamoDB读取所有80k任务似乎是不可行的 是否有人能够提供有关如何执行此操作的建议?如果AWS Lambda函数运行时间
是否有人能够提供有关如何执行此操作的建议?如果AWS Lambda函数运行时间过长,您可以使用用户数据启动脚本启动Amazon EC2实例来执行类似的功能。一旦完成任务,它就可以自行终止。(设置启动行为=终止,然后向操作系统发出关闭命令。) 但是,您是说此任务需要每30分钟完成一次,但是Lambda函数可能需要超过15分钟才能将所有内容推送到SQS。这可能证明只要始终运行一个小型EC2实例,而不是每隔30分钟启动一个Lambda函数,就可以了。EC2实例可以使用cron作业来触发活动。价格将类似(~1c/小时)
另一个瓶颈可能是每30分钟读取80K项,这将导致DynamoDB的访问模式出现峰值。(每30分钟短时间大量使用一次)。这可能需要过度配置读取容量以确保其能够满足需求。@john rotenstein分享了一个长期运行作业的解决方案,我个人会选择它作为可接受的解决方案:-)
我的答案将是对您的问题状态进行一个小的重构。
如果每30分钟触发一次Lambda,由于任务数量大,导致Lambda执行时间长,则减少单个Lambda的负载。
例如:
顺便说一句,我假设您成批阅读DynamoDB。是全状态处理吗?如果是无状态的,您应该有多个lambda来构建您的处理逻辑。感谢您提出的解决方案!(我肯定会考虑到这一点。)我还考虑利用dynamodbttl终止(并删除)一个项目,该项目发出一个由SQS使用的事件。此实现的问题是,根据表的大小,可能会有长达48小时的延迟。基于此,10万件物品的最大延迟约为27分钟。