佇列類型

Amazon SQS 針對不同的應用程式需求提供兩種佇列類型:

標準佇列

無限輸送量:標準佇列支援每個 API 動作每秒近乎無限個交易數 (TPS)。

至少傳遞一次:一個訊息至少傳遞一次,但偶爾會傳遞一個以上的訊息副本。

盡力按順序傳遞:訊息偶爾不會按照傳送順序傳遞。

FIFO 佇列

高輸送量:根據預設,FIFO 佇列支援高達每秒 300 個訊息 (每秒 300 次傳送、接收或刪除操作)。當您每個操作都要批次處理 10 則訊息 (最大值) 時,FIFO 佇列每秒最多可以支援 3,000 則訊息。若要要求提高限制,請發出支援要求

恰好處理一次:訊息只會傳遞一次並保持可用狀態,直到消費者處理訊息並將之刪除。佇列尚未引進複製功能。

先入先出交付:嚴格保持訊息傳送和接收的順序 (即先入先出)。

sqs-what-is-sqs-standard-queue-diagram
sqs-what-is-sqs-fifo-queue-diagram

只要應用程式可以處理抵達超過一次且未照順序排列的訊息,您就可以在許多案例使用標準訊息佇列,例如:

  • 從密集型背景工作去耦即時使用者請求:讓使用者在重新調整大小或編碼時能上傳媒體。
  • 將任務分配到多個工作者節點:處理大量的信用卡驗證請求。
  • 批次處理訊息以供日後處理:排程要新增到資料庫的多個項目。

當操作和事件的順序很重要或者不能接受重複項目時,FIFO 佇列的設計可加強應用程式之間的簡訊功能,例如:

  • 確保以正確順序執行使用者輸入的命令。
  • 透過以正確順序傳送價格修改來顯示正確的產品價格。
  • 避免學員在註冊帳戶之前註冊課程。

功能

  • 無限的佇列和訊息:建立無限的 Amazon SQS 佇列,其中具有任何區域中不限數目的訊息
  • 承載大小:訊息承載最多可包含 256 KB 的文字 (格式不限)。承載的每個 64 KB「區塊」以 1 次請求計費。例如,一個 256 KB 承載的單一 API 呼叫將以四次請求計費。若要傳送大於 256 KB 的訊息,可以使用 Amazon SQS Extended Client Library for Java (其使用 Amazon S3 存放訊息承載)。訊息承載的參考是使用 SQS 傳送。
  • 批次:使用批次 (最多 10 則訊息或 256KB) 傳送、接收或刪除訊息。批次成本與單一訊息成本相同,表示對使用批次處理的客戶來說,SQS 經濟效益更佳。
  • 長輪詢:減少額外的輪詢以盡量降低成本,同時以最快的速度接收新訊息。當您的佇列處於空的狀態時,長輪詢請求下一則訊息最多等待 20 秒。長輪詢請求和一般請求的成本相同。
  • 保留佇列中的訊息,最多 14 天。
  • 同時傳送和讀取訊息。
  • 訊息鎖定:收到訊息後,處理期間其會變成「鎖定」狀態。這可防止其他電腦同時處理該訊息。如果訊息處理失敗,鎖定將會過期,而訊息可再次處理。
  • 佇列共用:以匿名方式或透過特定的 AWS 帳戶安全地共用 Amazon SQS 佇列。佇列共用也可以依 IP 地址和一天中的時間加以限制。
  • 伺服器端加密 (SSE):使用 AWS Key Management Service (AWS KMS) 中管理的金鑰保護 Amazon SQS 佇列中的訊息內容。SSE 在 Amazon SQS 一收到訊息時立刻加密。訊息以加密格式存放,而 Amazon SQS 只會在訊息傳送給授權的取用者時才會解密訊息。
  • 無效字母佇列 (DLQ):使用無效字母佇列處理消費者未成功處理的訊息。當超過訊息的最大接收數時,訊息會移到與原始佇列相關聯的 DLQ。針對 DLQ 設定個別的消費者程序,這些程序可協助分析和了解訊息停滯的原因。DLQ 的類型必須與來源佇列 (標準或 FIFO) 一樣。

使用 Amazon SQS 搭配其他 AWS 基礎設施 Web 服務

Amazon SQS 訊息佇列可以和其他 AWS 服務搭配使用,例如 RedshiftDynamoDBRDSEC2ECSLambdaS3,讓分散式應用程式更具可擴展性且更可靠。以下是常見的設計模式:

  • 工作佇列:分離分散式應用程式的元件,不會全部同時處理相同的工作量。
  • 緩衝和批次操作:加入架構的可擴展性和可靠性,消除臨時容量峰值且不會遺失訊息或增加延遲。
  • 請求卸載:透過將請求排入佇列的方式,將慢速操作從互動請求路徑移除。
  • 散發結合 SQS 和 Simple Notification Service (SNS),將相同的訊息備份傳送給多個平行佇列。
  • 優先順序:使用個別的佇列以提供工作的優先順序。
  • 可擴展性:由於訊息佇列會將您的程序去耦,因此可以輕鬆地擴展訊息的傳送或接收速率 – 只要新增其他程序。
  • 彈性:當您的部分系統失敗時,不需要關閉整個系統。訊息佇列會將系統的元件去耦,因此,如果從佇列讀取訊息的某個程序失敗,當系統復原後,仍然可以將訊息新增到待處理佇列。

預定用途和限制

使用本服務需遵守 Amazon Web Services 客戶協議

進一步了解 Amazon SQS 定價

瀏覽定價頁面
準備好開始建立?
開始使用 Amazon SQS
還有其他問題嗎?
聯絡我們