AWS SAA系列

AWS 訊息傳遞

AWS SNS、SQS、Kinesis 與MQ比較

RobertWang

--

Photo by Karlis Reimanis on Unsplash

Amazon MQ

是AWS上託管的 Apache ActiveMQ 和 RabbitMQ,如果原本的程式架構中有用到,上雲的過程中就可以無痛換到Amazon MQ,無須修改程式。

Amazon Simple Queue Service(SQS)

SQS提供全託管的非同步佇列(Queue),網路服務總是會有一些耗效能的情況,在傳統的架構下會讓使用者卡住等待回應,讓使用者體驗不好,此時就能透過SQS解耦,將任務放到SQS中,再由後續服務自行去SQS中把任務拿出來處理,使用者在任務放到SQS後就會收到回應,體驗較佳。類似於軟體開發中的RabbitMQ,是Queueing的服務,非即時傳遞,而是靠背後服務主動抓取(pull)。

產生訊息(message) -> 訊息存入SQS -> 後端服務提取訊息處理

Features

  • pull based not push base
  • message Size max 256KB:大型訊息建議放到S3,用SQS傳遞S3檔案位址。
  • 訊息保留天數:預設四天,可以手動調整。
  • Standard Queues:無特定排序,一秒內幾乎是可以接收無上限的訊息,有可能有重複的message。
  • FIFO Queues:先進先出,相對一秒內只能接收300則訊息,一次只會有一個訊息。
  • 訊息能見度:訊息如果有服務領取,會暫時將訊息隱藏,避免被重複取用,若是取用後在特定時間內沒有被刪除,則會重新可見,有可能導致同一個訊息被領取兩次。
  • Long polling & Short polling(default):Polling代表後端服務從Queues中把messages拿出來,大部分的情況下建議使用Long polling,因為可以避免沒有訊息的時候空耗資源的情況發生,降低成本,除非需求上需要馬上處理message。
  • Amazon SQS Temporary Queue Client:關鍵字 request-response Pattern,可使用Temporary Queue來提高high-throughput,並減少成本。

Amazon Simple Notification Service (Amazon SNS)

SNS是一個全託管的pub/sub服務,提供發佈者(pbulisher)到訂閱者(subscriber)之間的消息傳遞,相對於SQS是pull based,SNS為push based,更可以串接AWS SQS、AWS Lambda、Https、AWS Kinesis、SMS(簡訊)、Email等服務。

aws doc

Features

  • pub/sub ,push based
  • 不支援排序且不會儲存message
  • 支援AWS SQS、AWS Lambda、Https、AWS Kinesis、SMS(簡訊)、Email、Mobile push。
  • Topic:像是發佈者的頻道,等待訂閱者來訂閱。
  • Subscription:訂閱topic,當topic收到訊息會馬上推送給訂閱者。

Amazon Kinesis

Kinese是一個全託管的串流服務,適用於收集、處理、分析大量串流資料,同一個串流可以被多個應用程式處理,可以參考這個影片把情境形象化。

kinesis(dev.to)
  • Record有時限,過後會消失
  • 有順序
  • 可透過shards增減來達到擴展或縮小Kinesis的目的。
  • 有別於SQS是定期去抓取,Kinesis是real-time
  • 適合串接其他資料庫像是RDS、DynamoDB、Redshift。
  • Amazon Kinesis Data Streams:類似於Kafka, 是一種可大規模擴展且耐久的即時資料串流服務,使用情境像是資料庫事件、金融股票交易、社交軟體、遊戲資料、地址位置追蹤。
  • Amazon Kinesis Video Streams:影像串流服務。
  • Amazon Kinesis Data Firehose:將串流資料導引到目標服務,像是AWS S3、AWS Redshift或是第三方的服務串接,可以將資料轉換成其他格式,資料被取走後就會從串流消失。
  • Amazon Kinesis Data Analytics:使用SQL來分析串流資料。

總結

MQ支援標準API協定,關鍵字是無須修改程式碼,擴展性不如SQS、SNS。

SQS 是非同步佇列,pull based、not real-time。

SNS是pub/sub服務,push based、real-time。

Kinese是串流服務,real-time。

詳細比較可參考AWS FAQs

資料來源

SAA準備計畫目錄

--

--

RobertWang

好好學習,天天向上,期待大AI時代來臨