amazon-web-services - 使用 AWS lambda 的异步后台作业
问题描述
我想创建一个 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 上的容器;我只想依赖无服务器概念。
这是一个不错的设置还是有更好的设置?
解决方案
推荐阅读
- ios - Getting an error "Expected a MKTileOverlay but got (null)" when trying to add MKTileOverlay object to MKMapView
- javascript - Cannot set property 'products' of undefined in Vue.js
- javascript - 当首先没有初始状态时,如何从对象切换元素?
- python - 无法连接到 Docker 中的 Elasticsearch
- python - 在for循环中合并索引上的数据帧
- node.js - 代理不适用于快递。好像没有定义
- codeigniter - 使用 SMTP Codeigniter 发送的电子邮件在不同的电子邮件提供商收件箱中中断
- sql-server - 在 SQL Server 的表中插入 2 个外键
- android - 将 Firestore 项目变为计数 - Android Studio
- javascript - NgRx 效果,出现失败,不接受新动作