本章講解如何讓系統之間解耦:SQS(點對點佇列)、SNS(一對多廣播)、Kinesis (即時串流,支援重播)與 EventBridge(事件路由)。重點是依照「是否需要多個消費者、是否需要順序保證、是否需要重播」這些條件來判斷該選哪個服務。
🧱 白話:佇列 = 銀行取號機——生產者抽了號碼牌就走(非同步:留言而非打電話),消費者照自己的速度一號一號叫。三大好處:解耦(下游掛了訊息不丟)、削峰(尖峰流量先排隊)、獨立擴展(隊太長就加人)。地基見 基礎篇 ch08 API 與非同步。
核心用途:解耦(Decouple)生產者和消費者,緩衝突發流量,實現非同步處理。
.fifo 結尾。核心模式:一對多(One-to-Many)訊息推播(Push)。發布者發送訊息到 Topic,所有訂閱者同時收到。
四種 Kinesis 服務:
| 特性 | SQS Standard | SQS FIFO |
|---|---|---|
| 吞吐量 | 幾乎無限(Unlimited) | 300 msg/s(無批次)<br>3000 msg/s(有批次) |
| 順序 | 最佳努力(可能亂序) | 嚴格 First-In-First-Out |
| 重複 | 至少一次(可能重複) | 恰好一次(去重) |
| 佇列名稱 | 任意 | 必須以 .fifo 結尾 |
| DLQ 類型 | Standard DLQ | 必須是 FIFO DLQ |
| 適合 | 高吞吐解耦、批次處理 | 需要順序的金融交易、訂單 |
| 使用情境 | 選擇服務 | 原因 |
|---|---|---|
| 解耦前後端,容忍訊息重複 | SQS Standard | 高吞吐、簡單解耦 |
| 銀行轉帳,需嚴格順序不重複 | SQS FIFO | 保證順序且 Exactly-Once |
| 廣播通知給多個系統 | SNS + SQS Fan-out | 一對多,各系統獨立消費 |
| 即時 Log 分析,需重播歷史資料 | Kinesis Data Streams | 可儲存且多消費者、支援重播 |
| 將串流資料載入 S3/Redshift | Kinesis Data Firehose | 全自動傳輸,無需管理 |
| AWS 服務事件的複雜路由 | EventBridge | 基於內容的事件路由,支援排程 |
| 特性 | Kinesis Data Streams | Kinesis Data Firehose |
|---|---|---|
| 管理模式 | 需要管理 Shard 數量 | 完全自動(Serverless) |
| 資料儲存 | 儲存 1~365 天 | 不儲存(直接轉發) |
| 重播 | 支援(可重播歷史資料) | 不支援 |
| 延遲 | 毫秒級即時 | 近即時(60秒緩衝) |
| 目的地 | 自訂消費者(Lambda/EC2/APP) | S3/Redshift/OpenSearch/Splunk |
| 計費 | 按 Shard 數量 + 資料量 | 按資料量計費 |
點擊卡片翻面查看答案,共 5 張。