本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SQS 中 FIFO 佇列的高輸送量
Amazon SQS 中的高輸送量 FIFO 佇列可有效管理高訊息輸送量,同時維持嚴格的訊息順序,確保應用程式處理大量訊息的可靠性和可擴展性。此解決方案非常適合需要高輸送量和訂購訊息傳遞的案例。
在嚴格的訊息排序並不重要,以及內送訊息數量相對較低或零星的情況下,不需要 Amazon SQS 高輸送量 FIFO 佇列。例如,如果您的小規模應用程式會處理不常或非連續訊息,則與高輸送量 FIFO 佇列相關的複雜性和成本可能不合理。此外,如果您的應用程式不需要高輸送量 FIFO 佇列提供的增強輸送量功能,則選擇標準 Amazon SQS 佇列可能會更符合成本效益,而且管理更簡單。
若要增強高輸送量 FIFO 佇列中的要求容量,建議增加訊息群組數目。如需高輸送量訊息配額的詳細資訊,請參閱 Amazon Web Services 一般參考 中的 Amazon SQS 服務配額。
如需每個佇列配額和資料發佈策略的資訊,請參閱Amazon SQS 訊息配額和SQS FIFO 佇列高輸送量的分割區和資料分配。
Amazon SQS FIFO 佇列高輸送量的使用案例
以下使用案例重點介紹了高輸送量 FIFO 佇列的各種應用,展示其在各行業和案例中的有效性:
-
即時資料處理:處理即時資料串流的應用程式 (例如事件處理或遙測資料擷取) 可受惠於高輸送量 FIFO 佇列,以處理持續湧入的訊息,同時保留其順序以進行精確分析。
-
電子商務訂單處理:在維護客戶交易順序至關重要的電子商務平台中,高吞吐量 FIFO 隊列確保訂單按順序處理,即使在購物旺季也沒有延遲。
-
金融服務:處理高頻交易或交易數據的金融機構依靠高吞吐量 FIFO Queue 以最小的延遲處理市場數據和交易,同時遵守嚴格的消息訂購法規要求。
-
媒體串流:串流平台和媒體分發服務利用高輸送量 FIFO 佇列來管理媒體檔案和串流內容的傳遞,確保使用者流暢的播放體驗,同時維持正確的內容傳遞順序。
SQS FIFO 佇列高輸送量的分割區和資料分配
Amazon SQS 將 FIFO 佇列資料存放在分割區中。磁碟分割是佇列的儲存配置,會自動跨區域內的多個可用區域複寫。 AWS 您未管理分割區。相反地,Amazon SQS 會處理分割區管理。
對於 FIFO 佇列,Amazon SQS 會在下列情況下修改佇列中的分割區數目:
-
如果目前的要求率接近或超過現有分割區可支援的值,則會配置額外的分割區,直到佇列達到地區配額為止。如需配額的相關資訊,請參閱 Amazon SQS 訊息配額。
-
如果目前的分割區使用率低,則可能會減少分割區的數目。
分割區管理會在背景自動進行,而且對您的應用程式是透明的。您的佇列和訊息隨時都可用。
依訊息群組 ID 分發資料
若要將訊息新增至 FIFO 佇列,Amazon SQS 會使用每則訊息群組 ID 的值做為內部雜湊函數的輸入。雜湊函數的輸出值決定要存放項目的分割區。
下圖顯示跨多個分割區的佇列。佇列的訊息群組 ID 是以項目編號為基礎。Amazon SQS 使用其雜湊函數來判斷新項目的存放位置,在此例中是依據字串 item0
的雜湊值。請注意,這些項目的儲存順序與新增到佇列的順序相同。每個項目的位置取決於其訊息群組 ID 的雜湊值。
注意
Amazon SQS 已針對 FIFO 佇列分區之間的項目統一分配進行優化,無論分割區數目為何。 AWS 建議您使用可以有大量不同值的訊息群組 ID。
最佳化分割區利用率
每個分割區最多支援每秒 3,000 則訊息進行批次處理,或支援的區域中傳送、接收和刪除作業,每秒最多可支援 300 則訊息。如需高輸送量訊息配額的詳細資訊,請參閱 Amazon Web Services 一般參考 中的 Amazon SQS 服務配額。
使用批次 API 時,系統會根據 依訊息群組 ID 分發資料 中所述的程序路由傳送每封訊息。路由至相同分割區的訊息會在單一交易中分組和處理。
若要最佳化 SendMessageBatch
API 的分割區使用率, AWS 建議盡可能使用相同的訊息群組識別碼批次處理訊息。
若要最佳化DeleteMessageBatch
和 ChangeMessageVisibilityBatch
API 的分割區使用率, AWS 建議您使用MaxNumberOfMessages
參數設為 10 的ReceiveMessage
要求,並批次處理單一要求傳回的接收控點。ReceiveMessage
在下列範例中,會傳送一批具有不同訊息群組識別碼的訊息。批次會分成三個群組,每個群組都會計入分割區的配額。
注意
Amazon SQS 僅保證具有相同訊息群組 ID 內部雜湊函數的訊息會在批次請求中分組。視內部雜湊函數的輸出和分割區數量而定,具有不同訊息群組 ID 的訊息可能會被分組。由於雜湊函數或分割區數目可以隨時變更,因此在一個點上分組的訊息可能不會在稍後分組。