java - 跟踪 AWS 上的异步 Lambda 执行

标签 java amazon-web-services architecture aws-lambda amazon-sqs

我正在尝试构建一个调用 AWS lambda 的流程,然后该流程利用 AWS SNS 发送触发更多 lambda 的消息。每个这样触发的 lambda 将输出文件写入 S3。流程如下图-

enter image description here

我的问题是 - 我怎么知道所有的 lambda 都完成了写入文件?我想执行另一个收集所有这些文件并进行合并的进程。我可以想到两种明显的方法 -

  1. 持续监控 s3 以获取与 SNS 消息一样多的输出文件。一旦达到总计数,调用最终的合并 lambda。
  2. 使用数据库作为同步源,为该特定作业/ session 写入计数并持续监控它直到计数达到 SNS 消息计数。

这两种解决方案都需要不断轮询,我想避免这种情况。我想以事件驱动的方式执行此操作。我希望 Amazon SQS 能通过某种“空队列 lambda 触发器”来拯救我,但 SQS 只支持在新消息上触发 lambda。有什么已知的方法可以在 AWS 中以事件驱动的方式实现这一点吗?非常感谢您的建议/意见/答案。

最佳答案

我会在这里提出几个选项:

阶跃函数:

这是状态机的托管服务。它非常适合协调工作流程。

原子计数:

如果你事先知道事物的数量,你可以初始化一个 Atomic Counter在 DynamoDB 中,然后在工作完成时自动递减它。使用 DynamoDB Streams 在计数器发生变化时触发 Lambda 调用,并在计数器归零时触发下一阶段(或工作结束)。请注意,每当应用程序创建、更新或删除表中的项目时,DynamoDB Streams 都会写入一条流记录,因此计数器的每次突变都会触发您的 Lambda。

请注意,DynamoDB Streams 保证以下内容:

  • 每个流记录在流中只出现一次。

  • 对于 DynamoDB 表中修改的每个项目,流记录的显示顺序与项目的实际修改顺序相同。

关于java - 跟踪 AWS 上的异步 Lambda 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53088269/

相关文章:

java - 创建名为“defaultServletHandlerMapping”的 bean 时出错

java - 接口(interface)I中有methodX,类C1和C2使用methodX的确切代码,那么将逻辑放入methodX的哪里? ( java )

java - 读取和丢弃数据 CSV

sql - 如何修复 AWS Athena 的 SQL

python - 无法在带有 Airflow 的 Jinja 模板中使用 Python 变量

web-services - 推荐的 Web 服务架构书籍/站点?

java - 如何让TextArea焦点样式与非焦点样式相同?

mysql - Amazon EC2 - 无法远程连接到 MariaDB

architecture - 敏捷开发和架构

c++ - 在 QScrollArea 视口(viewport)上安装事件过滤器