為 AWS 專家量身打造的 Google Cloud Platform:應用程式服務

更新日期:2017 年 3 月 20 日

Amazon 和 Google 提供協助促進應用程式各層面之間通訊的服務,而下列會提供這些服務的比較。本文將著重說明每個平台上可用的訊息傳遞服務。

訊息傳遞

服務模式比較

Amazon 提供的 Amazon Simple Queue Service (SQS) 以及 Google 提供的 Google Cloud Pub/Sub 都是用以將訊息排入佇列的服務。Amazon SQS 和 Cloud Pub/Sub 兩者對應的功能如下:

功能 Amazon SQS Google Cloud Pub/Sub
資料來源 佇列 主題
資料目標 佇列 訂閱者
部署位置 地區性 全球性
訊息保留 最多 14 天 最多 7 天
每個佇列傳輸中的訊息數量上限 標準上限為 120,000 則訊息,先進先出上限為 20,000 則訊息 提取無上限 (受限於配額),推送上限為 1,000 則訊息
酬載大小上限 256 KB 10 MB
擴散傳遞功能 搭配 Amazon SNS 原生支援
無效信件佇列
延遲佇列
帳單 佇列擁有者付費 訂閱者付費

Amazon Simple Queue Service (SQS) 和 Amazon Simple Notification Service (SNS)

在 Amazon Simple Queue Service (SQS) 中的運作是以您建立的訊息佇列為中心。您先將訊息傳送至佇列,然後再由用戶端應用程式從佇列提取這些訊息。如要實作「擴散傳遞功能」系統,讓多個訂閱者能夠使用單一訊息,請合併使用 Amazon SQS 和 Amazon Simple Notification Service (SNS)。SNS 可將推播通知傳送給各種裝置和端點;您使用 Amazon SQS 佇列來訂閱某個 Amazon SNS 主題,而該主題有發佈訊息時,Amazon SNS 就會將 Amazon SQS 訊息傳送給訂閱的佇列。

Amazon SQS 提供兩種類型的佇列:標準佇列和 FIFO 佇列。標準佇列可提供高總處理量,但是不保證訊息絕對會遵照排序或僅傳送一次。反之,FIFO 佇列 的總處理量低於標準佇列,但是可保證做到上述事項。

Cloud Pub/Sub

Cloud Pub/Sub 將訊息佇列、推送型訊息傳送以及大量串流訊息傳送合併至單一的全球服務。這款服務採用如下的發佈/訂閱模型:發佈者應用程式可建立訊息,並將訊息傳送至主題,而訂閱者應用程式可建立訂閱以從主題中接收訊息。Cloud Pub/Sub 這款推送/訂閱式服務服務,原本就同時支援集中傳遞功能和擴散傳遞功能,而集中傳遞功能可將多個訊息來源的目標集中在單一主題。

相較於 Amazon SQS 僅支援提取式訊息傳送,Cloud Pub/Sub 同時支援推送式和提取式訊息傳送。在推送式傳送中,Cloud Pub/Sub 會向您的訂閱者應用程式發出傳送訊息的要求。在提取式傳送中,您的訂閱者應用程式會向 Cloud Pub/Sub 伺服器發出擷取訊息的要求,做法和 Amazon SQS 類似。

Cloud Pub/Sub 和 Amazon SQS 標準佇列一樣,兩者都不保證訊息的排序。但是,您也可以採用幾種方式來減緩這項限制,以便讓訊息精確排序。Cloud Pub/Sub 和 Amazon SQS 標準佇列一樣,兩者都無法保證僅會傳送一次訊息。因此您的程式碼應採用冪等方式來處理訊息,如此就可以解決訊息重複的情況。

Amazon SNS 是直接和行動電話或網頁等使用者介面通訊,但是 Cloud Pub/Sub 是用於整合應用程式和系統。您可以使用 Firebase 雲端通訊服務來進行這種用戶端與伺服器之間的通訊,該服務是一款可將推播通知傳送至多部行動裝置的 Cloud Platform 解決方案。

訊息生命週期

Amazon SQS 和 Cloud Pub/Sub 都會要求您先確認訊息,才能從佇列或訂閱中移除訊息。

Amazon SQS

Amazon SQS 具備可見性逾時功能。當某個程序取得要處理的訊息時,其他正在處理佇列的程序就看不到此訊息。下圖說明處理訊息時,可見性逾時功能的運作方式。

Amazon SQS 可見性逾時

圖 1:Amazon SQS 可見性逾時

當程序取得訊息後,可見性逾時功能就會開始倒數計時。在這段倒數計時的過程中,會由消費端應用程式處理此訊息。如果處理成功且仍在可見性逾時期間,消費端應用程式便可呼叫以刪除訊息。如果應用程式在可見性逾時到期之前並未進行這項呼叫,其他程序就會再次看到此訊息。

Cloud Pub/Sub

同樣地,Cloud Pub/Sub 也有確認期限。期限預設為 10 秒,但是最多可延長為 10 分鐘。如果是提取訂閱,則訂閱者也可以針對每則訊息即時修改期限,允許以更長或更短的時間來處理給定的訊息。

Cloud Pub/Sub 確認期限

圖 2:Cloud Pub/Sub 確認期限

訊息傳送保證

Amazon SQS 可使用下列兩種佇列:標準佇列和先進先出 (FIFO) 佇列。Amazon SQS 標準佇列和 Cloud Pub/Sub 兩者均可保證每則訊息至少會傳送一次。同樣地,這兩項服務有相似的限制:可能偶爾會重複傳送訊息,而且無法保證訊息傳送的順序。

Amazon SQS FIFO 佇列支援僅傳送一次以及採用排序方式傳送訊息,因此可解決這兩個問題。FIFO 佇列每秒的交易數上限為 300 次。

雖然 Cloud Pub/Sub 無法保證使用 FIFO 就不會重複傳送訊息,也無法保證排序訊息,但是可以在應用程式層級完成此功能。請參閱訊息排序以瞭解相關說明。

費用

Amazon SQS 和 Amazon SNS

Amazon SQS 會依據 Amazon SQS 轉移的資料和要求數來計費。所有 Amazon SQS API 呼叫都會計為要求。單一要求可包含 1 至 10 則訊息以及 256 KB 的總酬載上限,而每個 64 KB 的酬載區塊都會當成一項要求來計費。

Amazon SNS 則會依據您發佈的通知數、傳送的通知數,以及針對管理主題和訂閱項目發出的其他 API 呼叫來計費。傳送定價則依端點類型而異。

Cloud Pub/Sub

Cloud Pub/Sub 則是依據訊息傳送使用的資料量來計費。系統會根據發佈、提取和推送作業的訊息和屬性資料來計算用量。詳情請參閱 Cloud Pub/Sub 定價

後續步驟

請參閱為 AWS 專家量身打造的 Google Cloud Platform 的其他相關文章:

請參閱透過 Cloud Functions 將 Connect Google Cloud Pub/Sub 連結至 AWS SNS 主題,以瞭解如何在 Cloud Platform 和 AWS 之間使用其各自的訊息傳遞服務來傳送資訊。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
為 AWS 專家量身打造的 Google Cloud Platform