2017-01-03 69 views
1

目前,我正在實施一個基於S3,Lambda和DynamoDB的解決方案。 我的用例是,當一個新對象上傳到S3上時,第一個Lambda函數被調用,下載新文件,將其分割成大約100(或更多)個部分,併爲每個部分添加額外的信息。下一步,每個部分都將被第二個Lambda函數處理,在某些情況下,將在DynamoDB中執行插入。AWS Lambda更快的處理方式

我的問題只是關於調用「第二lambda」的最佳方式。我的意思是,更快的方式。我想要同時執行100個Lambda函數(如果我要處理100個零件)。

我知道有不同的可能性:

1)我的第一拉姆達功能可以推動每一部分如在室壁運動流和項目我的第二拉姆達功能會發生反應,檢索項目和處理它。在這種情況下,我不知道AWS每次在流中有剩餘項目時是否會啓動新的Lambda函數。也許有一些限制...

2)我的第一個Lambda函數可以推動SNS主題中的每個部分,然後我的第二個Lambda會對每條新消息作出反應。在這種情況下,我對延遲(通過SNS主題發送消息的操作與執行第二個Lambda函數的時間之間的時間間隔)有一些懷疑。

3)我的第一個Lambda函數可以通過執行API調用並傳遞信息直接啓動第二個函數。在這種情況下,我不知道我是否可以同時啓動100個Lambda功能。我認爲我會受到針對AWS API的費率限制(我說,我想!)

有人對我的使用案例有反饋,也許建議?再一次,對我來說最重要的是擁有更快的處理方式。

感謝

+0

...或者您可以使用與第一個Lambda相同的方法。將你的作品放入另一個S3存儲桶中,在對象元數據中保存附加信息並將第二個Lambda附加到第二個存儲桶中。 –

+0

這是另一種解決方案,但我不確定這是更快的方法.... – Matt

回答

4

LAMBDA限制到位,以提供一些明智的默認設置,但是很多工作量很快超過他們。你可以要求增加,所以這不會成爲你的用例的瓶頸。本文檔描述的過程如下: http://docs.aws.amazon.com/lambda/latest/dg/limits.html

我不確定您的用例可以承受多少延遲,但我經常使用SNS扇出,並且延遲通常是次秒以下的調用(除非是Java /冷啓動)。

如果延遲非常敏感,那麼您可能需要直接使用Invoke with the InvocationType set to "Event"來調用Lambda。這會最大限度地減少阻止,而你Invoke 100次。如果您想要進行超級優化,您還可以在主Lambda函數內調用這些Invoke調用以進一步提高並行度。

冷容器偶爾會導致調用的延遲。如果毫秒數,這可能變得棘手。試圖超級優化Lambda處理時間的人有時會安排他們的Lambda函數執行,並且會立即返回(因此處理時間便宜)的「心跳」事件。這些容器會在很短的時間內保持「溫暖」,這使得他們可以在不產生「冷啓動」時間的情況下提取事件。 Java容器的啓動速度要比Node容器慢得多(我假設Python雖然沒有經過測試,但可能與Node相同)。

+1

感謝您的回答戴夫,最後我直接從我的第一個啓動我的lambda。它完美的作品。謝謝 – Matt