2017-02-13 72 views
-1

這裏是我的問題:回調多AWS LAMBDA執行完成

我要比較一個候選對象有一些標準與數以百萬計的DB其他候選人。由於lambda只允許執行5分鐘,所以會導致超時。

我的解決方案:

我的計劃,所以我打電話給10個拉姆達功能(通過SNS)處理10萬名考生,然後保存每個拉姆達的結果做考生10000塊這種比較一些DynamoDB表。但是,如何在所有lambda函數完成處理時獲得回調,以便我可以爲單個lambda收集這些結果,然後計算最終結果。如何實現這一目標,或者是否有更好的方法來實現我的目標。任何幫助最受讚賞。

+0

爲什麼不創建一個EC2/Elastic Beanstalk實例並在那裏運行應用程序,而不是與10個執行相同操作的lambda函數拼搏? –

+0

這是客戶的要求@GritritHeyssteen。 –

+0

你是什麼意思由「比較」?你是否想找到一個被比較的最佳候選人?或者,您是否需要根據某些標準對頂級X進行排名? – JohnH

回答

1

我不確定AWS Lambda是否真的非常適合您的用例。然而,只關注問題的主要部分,您可以使用DynamoDB Atomic Counters來確定所有處理何時完成。你會做到以下幾點:

  • 最初插入DynamodB記錄與像numberOfLambdaCalls屬性設置爲你蹬掉併發執行的數量,以及completedLambdaCalls屬性設置爲0的字段。
  • 隨着每個函數的完成,作爲更新DynamoDB記錄的一部分,它們將以原子方式增加completedLambdaCalls屬性。
  • 每個函數都可以檢查返回的更新結果,看它們是否是完成像if numberOfLambdaCalls == completedLambdaCalls這樣的處理的結果,如果它們是,執行任何必要的操作來觸發您的響應。
+0

謝謝馬克。你的回答幾乎是正確的。它實際上使我得到了一個更準確的解決方案,即「Condiditional Update」http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.ConditionalUpdate –

+0

我想知道什麼是特定的關於我的回答不正確。而條件更新如何完全解決您的問題? –

+0

來自AWS docs'但是,在銀行應用程序中,使用條件更新而不是原子計數器會更安全。原子計數器可以在併發更新的情況下產生錯誤的計數器,而條件更新則允許您添加條件表達式。例如兩個相同的請求獲得相同的計數器值,比如說10.然後我們可以在更新時添加一個條件,即現有值應該是10.因此,第一個更新它,第二個將更新它,第二個將失敗,在重試時它會更新計數器到12 –