什麼是 Amazon 簡單隊列服務 - Amazon Simple Queue Service

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

什麼是 Amazon 簡單隊列服務

Amazon Simple Queue Service (Amazon SQS) 提供安全、耐用且可用的託管佇列,可讓您整合與分離分散式軟體系統和元件。Amazon SQS 提供通用結構,例如無效字母佇列成本分配標籤。它提供了一個通用的 Web 服務 API,您可以使用 AWS SDK 支持的任何編程語言訪問。

使用 Amazon SQS 的優勢

  • 安全性您可以控制誰能傳送訊息到 Amazon SQS 佇列,並從佇列接收訊息。您可以選擇使用預設的 Amazon SQS 受管伺服器端加密 (SSE) 保護佇列中訊息的內容,也可以使用 AWS Key Management Service 中管理的自訂 SSE 金鑰 (AWS KMS) 來傳輸敏感資料。

  • 耐用性 - 為了確保訊息的安全,Amazon SQS 將它們存放在多部伺服器上。標準佇列支援at-least-once 訊息傳遞,而 FIFO 佇列僅支援一次訊息處理和高輸送量模式。

  • 可用性 – Amazon SQS 使用冗餘基礎設施以提供對訊息的高度並行存取,以及產生和消耗訊息的高可用性。

  • 可擴展性 – Amazon SQS 可以個別處理每個緩衝的請求,以透明的方式進行擴展來處理負載增加或尖峰,無須任何佈建指示。

  • 可靠性 – Amazon SQS 在處理訊息時會鎖定訊息,以便同一時間多個生產者可以傳送、多個消費者可以接收訊息。

  • 自訂 - 您的佇列不需完全一樣;舉例來說,您可以在佇列上設定預設延遲。您可以使用 Amazon Simple Storage Service (Amazon S3) 或 Amazon DynamoDB 存放大於 256 KB 的訊息內容,並讓 Amazon SQS 保有指向該 Amazon SQS 物件的指標,或者也可以將大型訊息分割成較小的訊息。

基本 Amazon SQS 架構

本節概述分散式傳訊系統的各個部分,並說明 Amazon SQS 訊息的生命週期。

分散式佇列

分散式傳訊系統有三個主要部分:分散式系統的元件、您的佇列 (分散在 Amazon SQS 伺服器上),以及佇列中的訊息。

在以下情況中,您的系統有數個生產者 (可傳送訊息到佇列的元件) 以及消費者 (從佇列接收訊息的元件)。佇列 (存放訊息 A 到 E) 將訊息以備援方式存放在多個 Amazon SQS 伺服器上。

分散式簡訊系統中的三個主要部分:分散式系統的元件、佇列 (分散在 Amazon SQS 伺服器上) 以及佇列中的訊息。

訊息生命週期

以下情況說明佇列中 Amazon SQS 訊息從建立到刪除的生命週期。

從建立到刪除的佇列中 Amazon SQS 訊息的生命週期。

Section one description for the previous lifecycle diagram. 生產者 (元件 1) 將訊息 A 傳送至佇列,而訊息以備援方式分散到 Amazon SQS 伺服器上。

Section two description for the previous lifecycle diagram. 當消費者 (元件 2) 準備好要處理訊息,其會耗用佇列上訊息,因此傳回訊息 A。在處理訊息 A 時,訊息 A 仍會留在佇列上,在可見性逾時期間內,不會傳回至後續的接收請求。

Section three description for the previous lifecycle diagram. 消費者 (元件 2) 從佇列刪除訊息 A,以免在可見性逾時到期後又再次接收和處理該則訊息。

注意

Amazon SQS 會自動刪除在佇列上存在超過訊息保留期間上限的訊息。預設的訊息保留期間為 4 天。不過可以使用 SetQueueAttributes 動作,將訊息保留期間設為 60 秒至 1,209,600 秒 (14 天)。

Amazon SQS、Amazon MQ 和 Amazon SNS 之間的差異

Amazon SQS、Amazon SNS 和 Amazon MQ 提供可高度擴展和 easy-to-use受管的簡訊服務,每一種服務都是針對分散式系統內的特定角色而設計的。以下是這些服務之間差異的增強概述:

Amazon SQS 將分散式軟體系統和元件分離和擴展為佇列服務。它通常會透過單一訂閱者處理訊息,非常適合預防訂單與損失的工作流程。為了實現更廣泛的分發,將 Amazon SQS 與 Amazon SNS 整合可啟用散發簡訊模式,有效地將訊息一次推送給多個訂閱者。

Amazon SNS 可讓發佈者透過主題傳送訊息給多位訂閱者,這些主題充當通訊管道。訂閱者會使用支援的端點類型接收已發佈的訊息 Amazon Data Firehose,例如 Amazon SQSLambda、HTTP、電子郵件、行動推送通知和行動文字訊息 (SMS)。此服務非常適合需要立即通知的案例,例如即時使用者參與或警報系統。為了防止訂閱者離線時遺失訊息,整合 Amazon SNS 與 Amazon SQS 佇列訊息可確保一致的交付。

Amazon MQ 最適合希望從傳統訊息代理程式遷移的企業,並支援 AMQP 和 MQTT 等標準簡訊協定,以及 Apache ActiveMQ 和 RabbitMQ。它提供了與需要穩定,可靠的消息傳遞而無需重新配置的舊系統的兼容性。

下表提供每個服務資源類型的概觀:

資源類型 Amazon SNS Amazon SQS Amazon MQ
同步
異步
佇列
發佈者-訂閱者訊息
訊息代理程式

建議新應用程式使用 Amazon SQS 和 Amazon SNS,因為它們可以從近乎無限的可擴展性和簡單的 API 中受益。他們通常以其 pay-as-you-go 定價為大量應用程序提供更具成本效益的解決方案。我們建議使用 Amazon MQ 從現有訊息代理程式遷移應用程式,這些代理程式仰賴 API (例如 JMS) 或進階訊息佇列通訊協定 (AMQP)、MQTT 和簡單文字導向訊息通訊協定 (STOMP) 等協定的相容性。 OpenWire