搜尋全站文章

沒有找到相關文章

試試其他關鍵字或檢查拼寫

找到 0 篇文章 • 包含部落格、筆記、旅遊文章

Medium GitHub LinkedIn

【DVA-C02】AWS SQS

作者頭像
Sam

2025年7月27日

5 分鐘閱讀

【DVA-C02】AWS SQS

AWS SQS & SNS & Kinesis

一、什麼是 AWS SQS?

  • 處理異步(非同步)事件:

    • 例如:報告生成、圖像處理
  • 流量消峰

    • 例如:演唱會搶票、訂單處理、電子郵件發送
    • 流量消峰:在流量高峰時,將流量分散到多個實例,避免單一實例負載過高。

Standard Queue


Kensis (Real-time)

可以視為一個高傳輸量的緩衝區,負責接收、暫時或是保留傳入的即時訊息,可以與其他的 AWS 服務整合,例如:想要將接收的資料存入資料庫:

  • 應用程式(Application):通常是客戶端,傳送資料到 Kinesis Stream
  • Kinesis Data Streams:是輸送帶,將產品暫時擺放在上面,並確保它們按照順序排列。
  • RDS:是資料庫,用來長期儲存資料的地方。

可以透過如 Lamdba functionData Firehose,來整合 Kinesis 與 RDS。

特性Provisioned Mode (預置模式)On-demand Capacity Mode (隨需容量模式)
計費方式按預先配置的容量計費按實際讀寫次數計費
效能管理手動或自動調整讀寫容量全自動,無需手動管理
適用場景工作負載穩定、可預期,需要成本控制的應用工作負載不可預測、流量尖峰差異大的應用
主要優勢成本可預期且通常更低彈性高、管理簡單
主要風險流量暴增時可能節流成本可能超出預算
aws kinesis put-record --stream-name my-stream --partition-key 123 --data "Hello, World!" --data-type "text"

response

{ "ShardId": "shardId-000000000000", "SequenceNumber": "49596280243459345917234234567890", "EncryptionType": "NONE" }

Apache Flink 是一個開源的流處理框架,可以與 Kinesis 整合,用來處理即時的資料。

比較 SQS vs SNS vs Kinesis

SQS (Simple Queue Service)

  • 消費者「拉取 (Pull)」資料:這是一個訊息佇列服務,消費者(例如,您的應用程式或伺服器)會主動向 SQS 佇列發出請求,以拉取(receive)訊息來進行處理。

  • 讀取後資料會被刪除:當消費者成功處理完一條訊息後,它會向 SQS 發送一個刪除請求,該訊息就會從佇列中移除。這確保了每個訊息通常只會被一個消費者處理一次。

  • 可以有任意數量的 Worker (消費者):SQS 具有高度的擴展性。您不需要限制消費者的數量,可以根據處理需求增加或減少 Worker,而 SQS 會自動處理負載平衡。

  • 無需預置吞吐量:SQS 是一種**隨需(on-demand)**服務。您無需像其他服務那樣預先設定讀取或寫入容量,它會根據您傳送或接收訊息的數量自動擴展,並依實際使用量計費。

SNS (Simple Notification Service)

  • 將資料推送 (Push) 到多個訂閱者:這是一個發布/訂閱服務。當發布者發送一條訊息到 SNS 主題時,SNS 會自動將這條訊息推送給所有訂閱了該主題的消費者。

  • 最多 12,500,000 個訂閱者:一個 SNS 主題可以支援非常龐大的訂閱者數量,這使其非常適合大規模的廣播通知,例如:即時通知、電子郵件、簡訊推播等。

Kinesis

  • 標準模式:拉取 (Pull) 資料:Kinesis Data Streams 的消費者也是以拉取的方式從分片(shards)中讀取資料。消費者會持續發送請求以獲取新的資料紀錄。

  • 每個分片 (Shard) 2 MB:這指的是每個分片每秒的讀取吞吐量上限。一個分片每秒最多可以讀取 5 筆交易,總資料量不超過 2 MB。如果要提高總吞吐量,需要增加分片的數量。

  • 用於即時大數據、分析與 ETL:Kinesis 專為處理即時串流資料而設計。它非常適合用於即時儀表板、使用者行為分析、系統日誌監控,以及作為 ETL (Extract, Transform, Load) 流程中的第一步。

  • 資料會在 X 天後過期:Kinesis Data Streams 中的資料是暫時性的。預設資料會保留 24 小時,但可以設定延長到最多 1 年。這讓您有機會在發生問題時,能夠重新處理過去的資料。


TD;LR

  • Long Polling

  • DelaySeconds

  • Increase the Visibility Timeout

  • Classic Fan-out Comsumer / Enhanced Fan-out Comsumer

  • Dead Letter Queue (DLQ) — 為了 Debug