2017-07-26 51 views

回答

1

Amazon SQS是一種排隊服務,它被設計爲一種緩衝區,用於保存消息直至它們被應用程序使用。通常在消費應用程序之前發生積壓時使用SQS。

AWS Lambda是一種高度並行的服務,可以並行運行功能。 Lambda函數由事件觸發,例如將文件上傳到Amazon S3或通過Amazon Kinesis接收數據。

我沒有一個明確的答案,爲什麼拉姆達不能SQS被觸發,但我想這是因爲無需做到這一點。原始應用程序應直接簡單地調用AWS Lambda函數,而不是發送消息給Amazon SQS,。這是一個更簡單的過程,移動部件更少。

有一個default limit of 1000 concurrent Lambda functions。如果這還不夠,則Lambda會將請求排隊,並且您還可以請求增加限制。

+0

這似乎是合理的。我們對排隊請求傳遞有任何保證嗎?特別是當涉及併發功能限制的請求數量很大時。 –

+1

根據[Lambda函數併發執行](http://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html):「AWS Lambda自動重試受限制的事件長達六個小時,並且延遲重試之間「。 –

2

某種程度上,是的,我同意你的觀點。

但是如果你真的認爲SQS和SNS的區別在於(正如John正確指出的那樣),SQS應該讓事情變得異步......它就像一個隊列,可以在需要時使用。假設代理程序可用時排隊消耗。 SQS將維護在不同活動之間可能存在大量滯後的工作流程。對於接近實時的操作SNS/Kinesis是更好的解決方案。

如果您希望調用Lambda;我認爲更好的體系結構將發送消息到SNS並讓Lambda被調用。

+1

或者,您需要使用隊列的外部進程,並在需要的任何級別的峯值併發情況下同步調用Lambda函數。同步,因爲這是從外部確定併發的唯一方法。 –

+0

我同意@ Michael-sqlbot – Deepak