Amazon web services 使用AWS lambda的异步后台作业

Amazon web services 使用AWS lambda的异步后台作业,amazon-web-services,aws-lambda,amazon-sqs,amazon-kinesis,Amazon Web Services,Aws Lambda,Amazon Sqs,Amazon Kinesis,我想创建一个RESTAPI,允许调用方提交作业的输入,该作业可能会在后台运行一分钟左右。 因此,API应该生成一个后台作业,并立即返回作业ID。然后,客户端可以查询另一个端点以获取作业状态和结果 我脑海中浮现的第一个想法是这样的: API“提交作业lambda”在数据库中创建作业记录,并将输入提交到SQS队列 “Worker lambda”轮询SQS,执行工作并更新数据库中的作业 API“查询作业lambda”从数据库返回作业记录 要使其工作,工作者lambda必须有足够的超时时间来完成一个

我想创建一个RESTAPI,允许调用方提交作业的输入,该作业可能会在后台运行一分钟左右。 因此,API应该生成一个后台作业,并立即返回作业ID。然后,客户端可以查询另一个端点以获取作业状态和结果

我脑海中浮现的第一个想法是这样的:

  • API“提交作业lambda”在数据库中创建作业记录,并将输入提交到SQS队列
  • “Worker lambda”轮询SQS,执行工作并更新数据库中的作业
  • API“查询作业lambda”从数据库返回作业记录
要使其工作,工作者lambda必须有足够的超时时间来完成一个大型作业。 API lambdas总是很快的,因为它们只进行数据库操作并提交给SQS

不过我还是有点烦,我需要两个兰姆达斯。但是如果我理解正确的话,在lambda函数向调用者返回响应之后就不可能继续执行它。 我还考虑过可能对事件使用动态而不是SQS,因为执行顺序并不重要,每个调用方都希望在合理的时间内完成他的工作。我的交通模式可能是10万个工作岗位的爆发,然后几天内什么都没有。 我还考虑在每个工作中支持多个子工作,因此每个工作实际上是1-100个工作单元

我不想为工人托管一个实例,比如ECS上的容器;我只想依靠无服务器的概念


这是一个不错的设置还是有更好的设置?

这看起来是一个很好的应用案例

您可以启动状态机执行,从中返回执行ID


该执行ID可用于控制执行过程的执行,执行过程正在进行所有必要的后台处理

您使用SQS的方法听起来不错-100.000不是什么大事,即使使用dynamodb作为数据存储,我也会完全使用无服务器

当然有两个lambda,一个用于处理HTTP请求,另一个用于完成工作。 请确保启用配置的并发以正确处理预期流量-

关于Kinesis,这听起来并不适合您的场景,因为您可能有几天没有任何流量,但Kinesis流是按小时计费的,您不能关闭它,只能删除它


我会坚持尽可能简单的计划,如果出现拦截器,我会尝试其他方法。

听起来不错,我会尝试这种方法。请注意,我是按小时付费的,所以SQS听起来是一个更好的计划,只要尝试一下,然后决定如果有任何问题就切换。我也在考虑同样的问题!这样就不需要一个Lambda函数。不过有一点值得注意:你说的是10万份工作的爆发。这对于Step函数来说已经足够了,但为了防止系统变得更大,Step函数的并发执行限制为1m。只是为了让你知道;-)仅供参考,虽然step函数看起来很棒,但在这种规模下运行它们比SQS更昂贵。如果采用steps,每10万个工作岗位的成本为7.5美元,而采用SQS,成本不到0.1美元。看看,如果这个想法是每隔几天就突破到10万,那么它可以很快累积起来,并且可能值得额外的开发成本。这肯定是一个因素。当你认为代码是你的团队在维护、安全和理解方面的责任时,额外的成本(以货币形式)可能值得一步一步的功能路线给你。正确答案取决于团队:)