2017-10-05 142 views
4

我們正在嘗試使用Clojure編寫的ETL作業的lambda。處理子lambda失敗

我們的體系結構是調度器將觸發父lambda,然後父lambda觸發100兒童lambda和計數器lambda。孩子完成工作後,會將數據寫入s3。計數器lambda將檢查S3中的文件數量,如果它是100,那麼它將組合所有文件並將其保存到S3,否則它將跨越新的計數器lambda並死亡。

所有積極的方案工作正常,但如果任何孩子失敗,那麼計數器的lambda將在無限循環中結束,因爲那裏不會是100個文件。

如果有任何適當的方法跨越孩子lambda,監視它,如果失敗需要重新啓動或單獨重試?

有什麼好的Clojure lambda框架?

+0

您是否使用AWS Step Functions來調整您的Lambdas? https://aws.amazon.com/step-functions/ –

+0

你的系統聽起來比我的好,任何開源框架部件的機會? –

+0

@MarkB我們也發現相同。感謝您的評論。 – SANN3

回答

1

在AWS中有簡單的方法叫做AWS Step Functions。 Step Functions提供了一個圖形化控制檯,可以將應用程序的組件安排和可視化爲一系列步驟。使用AWS Step Functions控制檯或API,流暢的Java API或AWS CloudFormation模板定義步驟。

一步使編制AWS Lambda函數變得簡單。無論功能語言如何,它都管理着所有的lambda。

步驟是良好的以下案例

  1. 運行順序功能基於數據並行
  2. 選擇功能
  3. 運行功能
  4. 重試功能/終於爲
  5. 的try/catch功能
  6. 運行小時代碼
2

過程監控不內置,我知道的,所以這種情況下,我建議採取一個頁面了二郎神隱喻遊戲書(supervisor trees)的任何拉姆達Clojure庫,並說有一個可靠的分佈式系統每個演員都需要一個監視器,所以一個體面的方法是讓每個lambda任務都有一個監視器。這可以真正簡化「讓它崩潰」理念的錯誤處理案例。

所以這會留給你的lambda表達式此列表:

  • 計數器:
    • 爲計數器觀察者/重新啓動裝置(你有種已經有此)
  • 工人x100
  • 主管x100

每個主管只檢查一個特定文件的存在,並重新啓動一個特定的lambda,如果它不存在。如果你的進程是冪等的,這會變得更容易,所以如果一個文件產生了兩次,你不必擔心太多,儘管使用aws api來檢查主管監聽的lambda是否仍在運行並不難。這個主管可以通過它監督的事情或者啓動系統其餘部分的事情來啓動,無論哪個代碼庫更簡單。你可能不需要明確啓動員工,主管可以做到這一點。

重要的部分是添加cloudwatch或任何你喜歡的事件系統(我的是瑞曼),所以你可以添加警報,以瞭解何時需要觀察觀察者。