【发布时间】:2020-09-15 12:17:41
【问题描述】:
我想创建一个 REST API,让调用者提交作业的输入,该作业将在后台运行一分钟左右。 因此,API 应该生成一个后台作业并立即返回一个作业 ID。然后,客户端可以向另一个端点查询作业状态和结果。
我脑子里第一个跳出来的想法是这样的:
- API“提交作业 lambda”在数据库中创建作业记录并将输入提交到 SQS 队列
- “Worker lambda”轮询 SQS,执行工作并更新数据库中的工作
- API“查询作业 lambda”从数据库返回作业记录
为此,worker lambda 必须有足够的超时时间才能完成一项大型工作。 API lambdas 总是很快的,因为它们只是进行数据库操作并提交给 SQS。
我仍然需要 2 个 lambda 表达式让我很困扰。但是如果我理解正确的话,在它向调用者返回响应后,就不可能继续执行 lambda 函数了。 我还考虑过可能对事件使用 Kinesis 而不是 SQS,因为执行顺序并不重要,每个调用者都希望在合理的时间内完成他的工作。我的流量模式可能是 100.000 个工作岗位的爆发,然后几天什么都没有。 我也在考虑在每个工作中支持多个子工作,这样每个工作实际上就是 1-100 个工作单位。
我不想为工作人员托管实例,例如ECS 上的容器;我只想依赖无服务器概念。
这是一个不错的设置还是有更好的设置?
【问题讨论】:
-
听起来不错,我会尝试这种方法。请注意,我按小时支付 kinesis,因此 SQS 听起来是一个更好的计划,请尝试一下,如果有任何问题,稍后再决定切换。
标签: amazon-web-services aws-lambda amazon-sqs amazon-kinesis