处理孩子lambda失败

时间:2017-10-05 09:06:06

标签: clojure aws-lambda fault-tolerance

我们正在尝试用我们的ETL工作的lambda,这是用Clojure编写的。

我们的架构是调度程序将触发父lambda,然后父lambda触发器100子lambda和计数器lambda。孩子lambdas完成工作后会将数据写入s3。计数器lambda将检查S3中的文件数,如果它是100,那么它将组合所有文件并将其保存到S3,否则它将跨越一个新的计数器lambda并死掉。

所有积极的情况都正常,但如果任何一个孩子失败,那么计数器lambda将以无限循环结束,因为不会有100个文件。

如果有任何正确的跨越子lambda的方法,请监视它,如果失败需要重新启动或单独重试?

有没有好的Clojure lambda框架?

2 个答案:

答案 0 :(得分:2)

我知道的任何lambda clojure库中都没有构建进程监控,因此对于这种情况,我建议从erlang隐喻剧本(supervisor trees)中取出一个页面然后说要有一个可靠的分布式系统每个角色都需要一个监视器,所以一个不错的方法就是为每个lambda任务建立一个观察者。这可以真正简化"让它崩溃的错误处理案例"理念。

所以这会让你留下这个lambdas列表:

  • 计数器:
    • 柜台的观察者/重启者(你已经有了这个)
  • 工人x100
  • 主管x100

每个主管只检查是否存在一个特定文件,并重新启动一个特定的lambda(如果不存在)。如果你的过程是幂等的,那么这会变得容易得多,所以如果文件被生成两次你就不必担心太多,尽管检查主管正在观看的lambda是否还在运行并不是很难使用aws api。这个主管可以通过它监督的东西或者启动系统其余部分的东西来启动,对你的代码库来说更容易。您可能不需要明确启动工人,主管可以这样做。

重要的一点是添加云观察或任何您最喜欢的事件系统(我的是黎曼),这样您就可以添加警报,以便知道何时需要观察观察者。

答案 1 :(得分:1)

AWS中的简单方法称为AWS Step Functions。 Step Functions提供了一个图形控制台,可以通过一系列步骤来安排和可视化应用程序的组件。使用AWS Step Functions控制台或API,流畅的Java API或AWS CloudFormation模板定义步骤。

步骤使编写AWS Lambda函数变得简单。无论函数的语言如何,它都会管理所有的lambdas。

步骤适用于以下用例

  1. 运行序列功能
  2. 并行运行功能
  3. 根据数据选择功能
  4. 重试功能
  5. try / catch / finally for functions
  6. 运行代码数小时