iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

Amazon Simple Notification Service (SNS) 是一項完全託管的發布/訂閱(Pub/Sub)訊息服務。它設計用於在分佈式系統、微服務和無伺服器應用程式之間進行高效、大規模的訊息傳遞和解耦。

SNS 的核心概念是「主題 (Topic)」,作為訊息發布者(Publishers)和訂閱者(Subscribers)之間的邏輯存取點和通訊通道。

  • 發布者 (Publishers):負責將訊息發送到主題。發布者無需知道誰會接收訊息。
  • 主題 (Topic):訊息的通訊頻道。
  • 訂閱者 (Subscribers):訂閱主題以接收訊息。SNS 支援多種協議的訂閱者,包括:
    • 應用程式到個人 (A2P)
      • 電子郵件(Email / Email-JSON)
      • 簡訊(SMS)
      • 行動推播通知(Mobile Push Notifications,例如:Apple、Google、Baidu)
    • 應用程式到應用程式 (A2A)
      • Amazon SQS(Simple Queue Service):將訊息推送到佇列中進行非同步處理。
      • AWS Lambda:觸發無伺服器程式碼執行,這是與圖片中 AWS Lambda 搭配使用時最常見且功能強大的模式之一。
      • HTTP/S 端點:將訊息推送到任何公開或私有的網頁伺服器。
      • AWS Kinesis Data Firehose:用於訊息歸檔和分析到 S3、Redshift、Elasticsearch 等。

關鍵優勢

  1. 即時推送 (Push Mechanism):SNS 採用推送機制,將訊息即時交付給訂閱者,無需訂閱者持續輪詢(Polling),減少延遲並降低成本。
  2. 大規模扇出 (Fanout):一條發布到 SNS 主題的訊息可以同時傳送到數百萬個訂閱者端點,實現高效的一對多訊息廣播。
  3. 高可用性與持久性:SNS 在多個可用區(Availability Zones)中存儲訊息,提供高度的訊息耐久性和可用性。
  4. 訊息過濾 (Message Filtering):訂閱者可以設定過濾策略,僅接收主題中符合特定條件的訊息,從而簡化訂閱者的處理邏輯。

https://ithelp.ithome.com.tw/upload/images/20251009/20106094bWAIRtbd83.png

https://ithelp.ithome.com.tw/upload/images/20251009/20106094rl5rD6DzEt.png

應用場景

SNS 的「發布/訂閱」模式使其在許多應用場景中都非常有用:

1. 應用程式通知 (User Notifications - A2P)

這是 SNS 最直觀的應用場景,直接面向終端用戶:

  • 系統警報與通知:例如,當使用者帳戶發生重要變更(密碼修改、登入異常)時,透過 SNS 發送電子郵件簡訊
  • 行動推播:向訂閱了應用程式的行動裝置發送即時推播通知(如新聞更新、聊天訊息或促銷活動)。
  • 訂單狀態更新:電子商務平臺在訂單狀態變更(已發貨、已送達)時,即時通知使用者。

2. 事件驅動型架構 (Event-Driven Architecture - A2A)

SNS 在解耦微服務和建立事件驅動工作流程方面至關重要:

  • 數據處理與扇出
    • 例如,一個服務將「新照片已上傳」的事件發布到一個 SNS 主題。
    • 訂閱該主題的服務可以同時被觸發:
      • 服務 A(Lambda 函數)可能負責生成縮圖。
      • 服務 B(SQS 佇列)可能負責更新資料庫紀錄。
      • 服務 C(HTTP 端點)可能負責通知審核系統。
    • 這確保了單一事件能可靠地觸發多個獨立的下游動作。
  • 系統監控與警報
    • Amazon CloudWatch 整合,設定警報(例如:EC2 執行個體的 CPU 使用率超過 80%)。
    • 當 CloudWatch 警報狀態變更時,它會發布訊息到一個 SNS 主題。
    • 訂閱該主題的可以是:電子郵件(通知運維人員)、Lambda 函數(自動嘗試修復或擴展資源)。

3. 分散式工作流程協調

在大型複雜系統中,SNS 用於協調多個獨立組件的工作:

  • 日誌或數據管道:當新的日誌檔案寫入 S3 儲存桶時,S3 可以觸發一個 SNS 主題,然後該主題將通知 Kinesis Data Firehose 或 Lambda 函數來處理、轉換和分析這些日誌。
  • 跨服務通訊:在複雜的微服務架構中,如果服務 A 需要非同步通知服務 B 和 C 關於某個操作已完成,SNS 提供了可靠且解耦的通訊機制。

上一篇
自動化魔法:EventBridge 規則
系列文
來都來了,那就做一個AWS從0到100的微服務AI小平台!25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言