亞馬遜 SNS 對比亞馬遜SQS
一、簡介
在本教程中,我們將討論 AWS 向用戶提供的兩項頂級服務:SNS 和 SQS。首先,我們將對其中一個進行簡短描述,並瀏覽一些簡單的用例。然後我們將從不同角度指出它們之間的主要區別。最後,我們將了解這些服務在耦合在一起時如何表現出強大的力量和功能。
2. SNS 定義和用例
用戶使用 Amazon Simple Notification Service 作為發送實時通知的託管服務。為了方便理解SNS,我們可以專門關註三個對象:主題、發布者和訂閱者。一個主題可以接收來自多個發布者的消息,也可以將同一條消息傳遞給多個訂閱者。發布者發送到主題的每條消息都會到達所有註冊的訂閱者:
我們來談談消息從發布者到訂閱者的旅程。首先,發布者和訂閱者都需要擁有從SNS主題讀取和寫入的權限。我們可以使用 IAM 訪問策略來定義權限。然後,當消息到達主題時,它會存儲在靜態加密存儲中,用於在出現故障時重試消息的傳遞。
查看圖像,我們可以觀察到有兩種類型的主題:標準和 FIFO。關鍵的區別在於,只有後者才能確保消息傳遞的順序與其發布的順序相匹配。
在發送消息之前,它們會經歷一個涉及激活數據保護策略的過程。這些政策旨在為個人身份信息 (PII) 和其他形式的敏感數據提供更高級別的保護。數據屏蔽等技術是作為此保護過程的組成部分實施的。
最後,訂閱者可以使用各種協議接收消息。還可以為每個訂閱者定義特定的過濾策略,以便丟棄某些消息而不發送某些消息,並使用死信隊列(SQS 隊列)來處理特定訂閱者的傳遞失敗和手動重試。
用戶可以使用 Amazon SNS 發送時間緊迫的通知。例如,借助Datadog 等監控工具,我們可以使用 SNS 發送由預定義閾值觸發的系統警報,以防應用程序中出現異常情況。另一個例子是使用 SNS 作為消息傳遞系統,通過電子郵件、短信和移動推送通知向訂閱我們應用程序的每個用戶發送更新。 SNS 和 SQS 是任何基於 AWS 雲的應用程序的基本構建塊,用於實現“扇出”場景。
3.SQS 定義和用例
Amazon 早在 2004 年就推出了 AWS SQS Simple Queue Service,它是最早向用戶提供的託管服務之一。它已成為許多基於雲的應用程序的基本構建塊之一。它的主要用途是實現不同軟件組件之間的異步通信。從經驗中我們知道,管理隊列會帶來一系列挑戰,例如有界緩衝區問題,並且管理分佈式隊列更加困難,因為我們需要在組件之間啟用通信來管理並發寫入和讀取。 SQS 有助於以簡單的方式解決所有這些問題。
現在讓我們討論一下消息從發布者到訂閱者的旅程。第一部分與SNS類似:發布者和訂閱者需要從SQS隊列讀取和寫入的權限。與在 SQS 中一樣,我們可以使用 IAM 訪問策略定義這些權限。然後,當消息到達隊列時,系統將其存儲在靜態加密存儲中。如果出現故障,傳輸重試機制將從該存儲中讀取數據。
在這種情況下,隊列可以是標準隊列、先進先出隊列或延遲隊列。我們可以選擇一個 FIFO 隊列來維護排序,或者選擇一個延遲隊列來將消息的傳遞延遲預定的時間。消費者可以使用兩種不同的機制從隊列中讀取數據:短輪詢和長輪詢。
任何需要軟件組件之間通信解耦的用例都可以充分利用 SQS 服務。例如,在SNS基礎設施中,SQS作為死信隊列的底層實現,處理特定訂閱者的投遞失敗和手動重試。
4.SNS VS. SQS:差異
現在讓我們總結一下 SQS 和 SNS 之間的主要區別:
比較 | SNS |
質量安全體系 |
---|---|---|
實體類型 | 主題(標準和 FIFO) | 隊列(標準、先進先出和延遲) |
消息消費 | Push機制,SNS向訂閱者推送消息 | 拉動機制(長輪詢和短輪詢) |
交貨保證 | 至少一次發貨 | 恰好一次交付 |
訂戶數量 | 最適合多個訂閱者用例 | 最適合單訂閱者用例 |
通訊類型 | 實時、A2A 和 A2P | 溝通延遲,只有A2A |
5. 為什麼要把SNS和SQS結合在一起?
“扇出”場景是典型的用例,我們需要 SNS 和 SQS 一起工作。在這種情況下,消息從 SNS 主題發送,然後復製到不同的 SQS 隊列。隊列已訂閱該服務。當然,這允許並行異步處理。
例如,假設我們需要構建一個視頻流平台。當用戶上傳新視頻時,我們會向主題發布一條 SNS 消息,其中包含該項目的鏈接(存儲在 S3 存儲桶中)。該主題與多個 SQS 隊列建立連接。隊列將(同時)處理同一視頻的不同編碼和視頻質量。然後,一系列獨立的應用程序從這些隊列中讀取數據並異步處理工作負載:
用於重試 SNS 消息傳遞的死信隊列是同時使用 SNS 和 SQS 的另一個示例。通過這種方式,客戶端和應用程序可以實現具有更好的彈性和容錯能力的實時通信。
六,結論
在本文中,我們描述了 AWS 雲提供商最常用的兩種軟件解決方案:簡單隊列服務和簡單通知服務。我們討論了關鍵特徵,了解了基本功能,並比較了最重要的功能。最後,我們分享了一個常見的使用示例,其中SNS和SQS結合起來解決了一些典型的軟件設計問題。