AWS SNS 與SQS – 主要差異是什麼?

在建構現代分散式系統和事件驅動架構(event-driven architectures)時,訊息傳遞服務是關鍵元件。 AWS 提供了兩項廣泛使用的、完全託管的訊息服務(fully managed message services):Amazon Simple Notification Service(SNS)和Amazon Simple Queue Service(SQS)。雖然兩者在功能上有相似之處,但它們的底層原理、使用場景和優勢差異顯著。

本文將由Oncloud AI 為您詳細解析SNS 與SQS 的主要差異,協助您根據實際需求選擇合適的服務。

 

什麼是Amazon SNS?

 

 

Amazon Simple Notification Service(SNS)是一種基於「發佈-訂閱模型(pub/sub)」的推播通知系統(push notification system),支援將訊息推播給多個訂閱者(messages to multiple subscribers)。它支援兩種類型的目標:應用到應用(A2A)和應用到個人(A2P)。

SNS 支援的A2A 目標包括:
  • AWS Lambda
  • Amazon SQS
  • Amazon Kinesis Data Firehose
  • AWS Event Fork 管道
  • HTTP 端點

 

SNS 支援的A2P 目標包括:
  • 簡訊(SMS)
  • 電子郵件
  • 應用程式內通知
  • AWS Chatbot
  • 呼叫器職責

 

SNS 提供標準主題和FIFO 主題。標準主題效能高,延遲低;而FIFO 主題支援訊息順序和去重,適用於要求嚴格訊息順序的業務場景。

 

什麼是Amazon SQS?

 

Amazon Simple Queue Service(SQS)是一種基於輪詢(polling)的非同步處理服務(asynchronous processing service),用於將系統模組解耦,實現後台任務和非同步工作負載。

SQS 的使用模式是生產者將訊息傳送到佇列中,消費者按需輪詢佇列並取得訊息進行處理。 SQS 提供兩種類型的佇列:

  • 標準佇列:支援高吞吐量、至少一次投遞
  • FIFO 佇列(fifo queues):保證訊息順序與唯一性

SQS 支援設定保留期(message retention),最長可達14 天,還支持死信隊列(Dead Letter Queue, DLQ),用於處理多次失敗的訊息,提高訊息可靠性(reliable message delivery)。

 

SNS 與SQS 的主要差異

 

1. 推送vs 輪詢
  • SNS 是基於推播的服務,一旦訊息發布,就立即傳遞給所有訂閱者。
  • SQS 是基於輪詢的服務,訊息發布後儲存在隊列中,等待消費者輪詢處理。
2. 多對多vs 多對一
  • SNS 支援多對多的關係,一個SNS topic 可有多個發布者和訂閱者。
  • SQS 通常為多對一關係,多個生產者可以發送訊息,但訊息通常由一個消費者處理。
3. 訊息持久性
  • SNS 不保證訊息持久性,如果在消費者不可用時推播訊息,則訊息將被丟棄。
  • SQS 提供強大的持久化機制,確保訊息被接收或透過DLQ 進行後續處理。
4. 訊息重試機制
  • SNS 預設無重試機制,若推送失敗則訊息遺失。
  • SQS 提供重試機制及DLQ,可設定最大重試次數。
5. 批次能力
  • SNS 只支援單一訊息推送。
  • SQS 支援批次處理(batch processing),標準佇列每批最多可處理10,000 個訊息,FIFO 佇列最多10 個。

 

使用場景對比

 

適合使用SNS 的場景:
  • 需要推播訊息到多個不同系統或平台
  • 即時通知用戶(如簡訊、郵件、App 通知)
  • 實現扇出模式(fan-out pattern)廣播訊息到多個訂閱者

 

適合使用SQS 的場景:
  • 後台任務處理,需支援非同步與持久性
  • 系統組件之間解耦,避免直接通信
  • 對訊息可靠性、重試機制要求高
  • 大量處理訊息

 

扇出模式:SNS 與SQS 結合使用

在一些場景中,您可以將SNS 與SQS 結合使用。例如,SNS 將訊息發佈到多個SQS 佇列,每個佇列對應一個處理邏輯。這種方式稱為「扇出模式」。

範例:

  1. 用戶上傳圖片
  2. SNS 發布上傳事件
  3. 多個SQS 佇列接收訊息:
    • 隊列A:圖片識別
    • 隊列B:縮圖生成
    • 隊列C:通知用戶

 

透過該模式,您可以實現可靠的非同步處理和模組解耦。

 

EventBridge 與Kinesis:其他選擇

除了SNS 和SQS,AWS 還提供其他訊息和事件服務:

Amazon EventBridge
  • 事件總線服務,支援事件過濾、路由
  • 可將事件傳送至SNS、SQS、Lambda 等目標
  • 適用於複雜的事件處理邏輯
Amazon Kinesis
  • 用於處理和分析即時串流數據
  • 支援高吞吐和複雜的數據處理

 

总结

Amazon SNS 與Amazon SQS 是建構可擴充、高可用系統的核心元件。 SNS 適用於即時推播通知和一對多場景,而SQS 更適合非同步處理與系統解耦。

選擇合適的服務不僅能提升系統效能,也能降低耦合性和維護成本。

Oncloud AI 作為AWS 官方合作夥伴,提供包括AWS 代付、AWS 雲端伺服器遷移、SQS/SNS 架構諮詢、雲端服務託管等專業服務。如有需求,歡迎掃描頁面底部二維碼與我們聯絡!

更多探索

Tell me what you need