2017-05-22 25 views
0

我有一個需要很長時間才能完成的lambda函數。它從DynamoDB讀取記錄,併爲每個記錄執行對第三方服務的HTTP調用,然後將結果保存回DynamoDB。我想擴展這個功能,這樣它可以處理更多的記錄。因需要重新設計,因爲最大拉姆達持續時間可以超過。降低並行執行lambda函數的限制?

解決方案似乎很明顯。一個lambda從DynamoDB讀取所有記錄,或者爲所有記錄進行HTTP請求,並將消息發送到SQS。另一個lambda在隊列中偵聽並僅爲一部分數據執行作業。這兩種lambda都很快。

問題:我使用的第三方API允許每秒調用5次請求。爲了滿足這個要求,我需要確保使用SQS事件的lambdas不超過第三方API的併發限制。

是否可以節制AWS Lambda並行執行?

我使用Final解決方案類似於在下面的評論由programmersmurf提出的一個。

  1. 調度程序Lambda從DynamoDB讀取所有記錄並將消息發送到SQS。它被設置爲在凌晨4點運行
  2. 工人LAMBDA定於上午05點上班,並觸發每天只有一次
  3. 工人LAMBDA花費數SQS的消息,使平行
  4. 的HTTP請求,一旦工人拉姆達消息的完整和數目爲陽性遞歸LAMBDA呼叫由
  5. 如果接收到的消息的數量是0處理終止遞歸工人LAMBDA調用

優點: - 觸發的沒有手動調諧與消耗量SQS消息 - 工人Lambdas 執行之間沒有暫停 - 由於兩個最大吞吐量

回答

0

我不認爲有現有的能力來做到這一點,但你可以嘗試下面的東西。

  1. 安排您的SQS消費者的λ運行每隔一分鐘的消息
  2. 設置最大數量消耗60(秒)* 5 = 300
  3. 有5個線程
  4. 使用固定的線程池作出第三方調用。如果需要的話

希望這有助於

+0

由於在代碼裏做節流,這是可行的。非常感謝。我正在考慮一種替代解決方案,即可以使用TTL發佈消息。所以調度器lambda可以發佈TTL增加的消息。前5個TTL 0,另外5個TTL 1,另外5個TTL 2,還有一個。 執行還是要做的。我會在完成後更新此線程。 –

+0

我用我用過的解決方案更新了這個問題。它與這次按摩中提出的類似。 –