本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SQS FIFO 隊列和 Lambda 並發行為
透過搭配 Lambda 使用 FIFO (先進先出) 佇列,您可以確保每個訊息群組內的訊息有序處理。Lambda 函數不會同時針對同一訊息群組執行多個執行個體,進而維持順序。但是,它可以擴展以 parallel 處理多個訊息群組,以確保有效率地處理佇列的工作負載。以下幾點說明 Lambda 函數在處理來自 Amazon SQS FIFO 佇列與訊息群組 ID 相關的訊息時的行為:
-
每個訊息群組的單一執行個體:在任何時間點,只有一個 Lambda 執行個體會處理來自特定訊息群組 ID 的訊息。這可確保同一群組內的訊息依序處理,以維持 FIFO 序列的完整性。
-
不同群組的並行處理:Lambda 可以使用多個執行個體,同時處理來自不同訊息群組 ID 的訊息。這表示,雖然 Lambda 函數的一個執行個體正在處理來自一個訊息群組 ID 的訊息,但其他執行個體可以同時處理來自其他訊息群組 ID 的訊息,並利用 Lambda 的 parallel 處理多個群組。
先進先出佇列訊息群組
FIFO 佇列可確保以傳送的確切順序處理訊息。他們會使用訊息群組 ID 來分組應該依序處理的郵件。
系統會依序處理相同訊息群組中的訊息,並且一次只會處理來自每個群組的一則訊息以維持此順序。
與 FIFO 隊列的 Lambda 並發
建立佇列之後,您可以傳送訊息給佇列。
當您設定 Lambda 函數來處理來自 Amazon SQS FIFO 佇列的訊息時,Lambda 會尊重 FIFO 佇列提供的訂購保證。以下幾點說明在使用訊息群組 ID 時處理來自 Amazon SQS FIFO 佇列的訊息時,Lambda 函數在並行和擴展方面的行為。
-
訊息群組內的並行:一次只有一個 Lambda 執行個體處理特定訊息群組 ID 的訊息。這可確保群組內的訊息會依序處理。
-
擴展和多個訊息群組:雖然 Lambda 可以同時擴展以處理訊息,但此擴展會跨不同的訊息群組進行。如果您有多個訊息群組,Lambda 可以 parallel 處理多個群組,而每個群組都會由個別的 Lambda 執行個體處理。
如需詳細資訊,請參閱AWS Lambda 操作員指南中的 Lambda 中的縮放和並行。
使用案例範例
假設您的 FIFO 佇列收到具有相同訊息群組識別碼的訊息,且 Lambda 函數具有較高的並行限制 (最多 1000 個)。
如果群組識別碼為 'A' 的訊息正在處理,而來自群組識別碼 'A' 的另一則訊息到達時,第二則訊息將不會觸發新的 Lambda 執行個體,直到完全處理第一則訊息。
但是,如果來自群組識別碼 'A' 和 'B' 的訊息到達,則兩個訊息都可以由個別的 Lambda 執行個體同時處理。