在建構現代分散式系統和事件驅動架構(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 佇列,每個佇列對應一個處理邏輯。這種方式稱為「扇出模式」。
範例:
- 用戶上傳圖片
- SNS 發布上傳事件
- 多個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 架構諮詢、雲端服務託管等專業服務。如有需求,歡迎掃描頁面底部二維碼與我們聯絡!