处理 child 次 lambda 失败
Handle child lambda failures
我们正在尝试使用 Clojure 编写的 ETL 作业的 lambda。
我们的架构是调度程序将触发 parent lambda,然后 parent lambda 触发 100 child lambda 和计数器 lambda。 child lambda 完成工作后会将数据写入 s3 。计数器 lambda 将检查 S3 中的文件数,如果它是 100 那么它将合并所有文件并将其保存到 S3,否则它将跨越一个新的计数器 lambda 并死亡。
所有积极的情况都工作正常,但如果任何 child 失败,那么计数器 lambda 将在无限循环中结束,因为不会有 100 个文件。
如果有任何正确的方法来跨越 child lambda,请对其进行监控,如果失败需要重新启动或单独重试?
有什么好的Clojure lambda框架吗?
我所知道的任何 lambda clojure 库都没有内置进程监控,因此对于这种情况,我建议从 erlang 隐喻剧本 (supervisor trees) 中取出一页,并说有一个可靠的分布式系统每个参与者都需要一个监视器,所以一个体面的方法是为每个 lambda 任务设置一个监视器。这确实可以根据 "let it crash" 理念简化错误处理案例。
所以这将为您留下以下 lambda 列表:
- 柜台:
- 一个 watcher/restarter 用于计数器(你已经有了这个)
- 工人 x100
- 主管 x100
每个主管只检查一个特定文件是否存在,如果不存在则重新启动一个特定的 lambda。如果你的过程是幂等的,这会变得容易得多,所以如果一个文件被生成两次,你不必太担心,尽管使用aws api。这个监督者可以由它所监督的事物启动,也可以由启动系统其余部分的事物启动,无论对您的代码库来说哪个更容易。您可能不需要显式启动工作人员,主管可以这样做。
重要的部分是添加 cloudwatch 或任何您最喜欢的事件系统(我的是 riemann),这样您就可以添加警报以了解何时需要监视观察者。
在 AWS 中有一个简单的方法叫做 AWS Step Functions。 Step Functions 提供了一个图形控制台,用于将应用程序的组件排列和可视化为一系列步骤。使用 AWS Step Functions 控制台或 API、流畅的 Java API 或 AWS CloudFormation 模板定义步骤。
Step 使编排 AWS Lambda 函数变得简单。无论函数语言如何,它都管理所有的 lambdas。
Step 适用于以下用例
- 运行 序列函数
- 运行 并行运行
- Select 函数基于数据
- 重试函数
- try/catch/finally 函数
- 运行使用几个小时的代码
我们正在尝试使用 Clojure 编写的 ETL 作业的 lambda。
我们的架构是调度程序将触发 parent lambda,然后 parent lambda 触发 100 child lambda 和计数器 lambda。 child lambda 完成工作后会将数据写入 s3 。计数器 lambda 将检查 S3 中的文件数,如果它是 100 那么它将合并所有文件并将其保存到 S3,否则它将跨越一个新的计数器 lambda 并死亡。
所有积极的情况都工作正常,但如果任何 child 失败,那么计数器 lambda 将在无限循环中结束,因为不会有 100 个文件。
如果有任何正确的方法来跨越 child lambda,请对其进行监控,如果失败需要重新启动或单独重试?
有什么好的Clojure lambda框架吗?
我所知道的任何 lambda clojure 库都没有内置进程监控,因此对于这种情况,我建议从 erlang 隐喻剧本 (supervisor trees) 中取出一页,并说有一个可靠的分布式系统每个参与者都需要一个监视器,所以一个体面的方法是为每个 lambda 任务设置一个监视器。这确实可以根据 "let it crash" 理念简化错误处理案例。
所以这将为您留下以下 lambda 列表:
- 柜台:
- 一个 watcher/restarter 用于计数器(你已经有了这个)
- 工人 x100
- 主管 x100
每个主管只检查一个特定文件是否存在,如果不存在则重新启动一个特定的 lambda。如果你的过程是幂等的,这会变得容易得多,所以如果一个文件被生成两次,你不必太担心,尽管使用aws api。这个监督者可以由它所监督的事物启动,也可以由启动系统其余部分的事物启动,无论对您的代码库来说哪个更容易。您可能不需要显式启动工作人员,主管可以这样做。
重要的部分是添加 cloudwatch 或任何您最喜欢的事件系统(我的是 riemann),这样您就可以添加警报以了解何时需要监视观察者。
在 AWS 中有一个简单的方法叫做 AWS Step Functions。 Step Functions 提供了一个图形控制台,用于将应用程序的组件排列和可视化为一系列步骤。使用 AWS Step Functions 控制台或 API、流畅的 Java API 或 AWS CloudFormation 模板定义步骤。
Step 使编排 AWS Lambda 函数变得简单。无论函数语言如何,它都管理所有的 lambdas。
Step 适用于以下用例
- 运行 序列函数
- 运行 并行运行
- Select 函数基于数据
- 重试函数
- try/catch/finally 函数
- 运行使用几个小时的代码