Amazon SQS 佇列類型 - Amazon Simple Queue Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon SQS 佇列類型

Amazon SQS 支援兩種佇列類型:標準佇列FIFO 佇列。使用下表來判斷哪個佇列最符合您的需求。

標準佇列 FIFO 佇列

無限制輸送量 – 標準佇列支援每個動作 (SendMessageReceiveMessage或 ) 每秒非常高、幾乎無限制的 API 呼叫數量DeleteMessage。這種高輸送量使它們非常適合需要快速處理大量訊息的使用案例,例如即時資料串流或大規模應用程式。雖然標準佇列會隨需求自動擴展,但監控使用模式以確保最佳效能至關重要,尤其是工作負載較高的區域。

At-least-once交付 – at-least-once交付,這表示每則訊息至少交付一次,但在某些情況下,由於重試或網路延遲,訊息可能會交付一次以上。您應該設計應用程式以使用等冪性操作來處理潛在的重複訊息,以確保多次處理相同的訊息不會影響系統的狀態。

最佳努力排序 – 提供最佳努力排序,這表示當 Amazon SQS 嘗試按照訊息傳送的順序傳遞訊息時,不保證這一點。在某些情況下,訊息可能無法按順序送達,尤其是在高輸送量或故障復原的情況下。對於訊息處理順序至關重要的應用程式,您應該處理應用程式中的重新排序邏輯,或使用 FIFO 佇列進行嚴格排序保證。

耐用性和備援 – 標準佇列可跨多個 AWS 可用區域儲存每則訊息的多個副本,以確保高耐用性。這可確保即使發生基礎設施故障,訊息也不會遺失。

可見性逾時 – Amazon SQS 可讓您設定可見性逾時,以控制訊息在收到訊息後隱藏的時間長度,確保其他消費者不會處理訊息,直到完全處理或逾時過期為止。

高輸送量 – 當您使用批次處理時,每個 API 方法 (ReceiveMessage、 或 ) 的 FIFO 佇列每秒最多處理 3SendMessageBatch,000 則訊息DeleteMessageBatch。此輸送量依賴每秒 300 個 API 呼叫,每個 API 呼叫處理一批 10 個 messages.By 以啟用高輸送量模式,您可以在訊息群組內輕鬆排序,擴展到每秒 30,000 個交易 (TPS)。在沒有批次處理的情況下,FIFO 佇列支援每個 API 方法 (SendMessageReceiveMessage或 ) 每秒最多 300 個 API 呼叫DeleteMessage。如果您需要更多輸送量,您可以透過 AWS 支援中心請求提高配額。若要啟用高輸送量模式,請參閱 在 Amazon SQS 中啟用 FIFO 佇列的高輸送量

精確處理一次 – FIFO 佇列會傳送每則訊息一次,並保持可用狀態,直到您處理和刪除訊息為止。透過使用 MessageDeduplicationId或內容型重複資料刪除等功能,您可以防止重複的訊息,即使因網路問題或逾時而重試也一樣。

First-in-first-out交付 – FIFO 佇列可確保您依訊息群組內傳送的順序接收訊息。透過將訊息分散到多個群組,您可以平行處理訊息,同時保持每個群組中的順序。

標準佇列訊息傳遞。
FIFO 佇列訊息傳遞。
當輸送量至關重要時,使用標準佇列在應用程式之間傳送資料,例如:
  • 將即時使用者請求與密集背景工作分離。允許使用者在背景處理調整大小或編碼等任務時快速上傳媒體,確保快速回應時間而不會讓系統過載。

  • 將任務配置到多個工作者節點。將大量信用卡驗證請求分散到多個工作者節點,並使用等冪操作處理重複的訊息,以避免處理錯誤。

  • 批次訊息以供未來處理。將多個項目排入佇列,以便批次新增至資料庫。由於無法保證訊息順序,因此如有必要,請設計您的系統來處理out-of-order處理。

當事件順序很重要時,使用 FIFO 佇列在應用程式之間傳送資料,例如:

  • 確定以正確的順序執行使用者輸入的命令。這是 FIFO 佇列的關鍵使用案例,其中命令順序至關重要。例如,如果使用者在應用程式中執行一系列動作,FIFO 佇列會確保動作的處理順序與輸入的順序相同。

  • 以正確的順序傳送價格修改,以顯示正確的產品價格。FIFO 佇列可確保產品價格的多個更新到達並依序處理。如果沒有 FIFO,價格降低可能會在價格增加後處理,導致顯示不正確的資料。

  • 在註冊帳戶之前,防止學生註冊課程。透過使用 FIFO 佇列,您可以確保註冊程序以正確的順序進行。系統會先處理帳戶註冊,然後處理課程註冊,防止註冊請求提早執行。