在前一篇文章中,我們詳細了解了分散式架構的演進過程:從單台主機開始,因為流量增長而逐步拆分成運算服務、資料庫服務、檔案服務、快取服務等專業分工的架構。
但是,理論歸理論,實際要建立這樣的系統時該怎麼做呢?
這就是雲端服務的價值所在。AWS(Amazon Web Services)作為全球最大的雲端服務提供商,幾乎為分散式架構的每個組件都提供了現成的解決方案。
你不需要自己買伺服器、裝軟體、設定網路,只要會使用 AWS 的服務,就能快速建立起穩定的分散式系統。
本文將帶你看懂 AWS 如何對應到我們之前提到的每一個分散式架構組件,讓你能夠實際動手建立一個能處理高流量的系統。
運算服務:EC2 + ELB + ASG
還記得前面提到的「多台普通電腦一起工作」的概念嗎?AWS 把這套機制包裝得非常完整。
EC2:你的虛擬電腦軍團
Amazon EC2 (Elastic Compute Cloud) 就是 AWS 版本的「虛擬主機」。
實際使用情境
小型網站:租用 1 台 t3.micro(每月約台幣 300 元)
中型電商:租用 5 台 m5.large(每月約台幣 15,000 元)
大型平台:租用 50 台 c5.xlarge(每月約台幣 150,000 元)EC2 的強大之處
- 按需計費:用多少付多少,不用時可以關機停止計費
- 規格彈性:從最小的 t3.nano 到最強的 x1e.32xlarge 任你選
- 快速啟動:幾分鐘內就能啟動一台新主機
- 全球部署:可以在美國、歐洲、亞洲等地部署
ELB:聰明的流量分配員
Elastic Load Balancer 就是我們之前提到的「帶位員」,負責把用戶請求分配給多台 EC2。
ELB 的類型選擇
Application Load Balancer (ALB)
- 適合:網站、API 服務
- 特點:可以根據網址路徑分配(/api 給 API 伺服器,/images 給檔案伺服器)
Network Load Balancer (NLB)
- 適合:遊戲服務、即時通訊
- 特點:超低延遲,處理速度極快
Classic Load Balancer
- 適合:簡單應用
- 特點:設定簡單,功能基本
實際運作方式
用戶請求 → ELB → 檢查各台 EC2 的負載狀況 → 選擇最不忙的那台 → 轉發請求ASG:自動擴展魔法師
Auto Scaling Group 是真正的魔法,它會根據流量自動增減 EC2 數量。
設定範例
最小數量:2 台(確保基本服務)
最大數量:20 台(避免成本失控)
目標數量:根據 CPU 使用率自動調整
當 CPU > 70% 持續 5 分鐘 → 增加 2 台 EC2
當 CPU < 30% 持續 10 分鐘 → 減少 1 台 EC2實際場景
- 平日晚上:網站流量小,只用 3 台 EC2
- 周末促銷:流量暴增,自動擴展到 15 台 EC2
- 促銷結束:流量回歸正常,自動縮減回 3 台 EC2
資料庫服務:RDS vs DynamoDB
前面我們提到資料庫會變成瓶頸,需要「讀寫分離」和專業分工。AWS 提供了兩大類解決方案。
RDS:傳統資料庫的進化版
Amazon RDS (Relational Database Service) 把我們熟悉的 MySQL、PostgreSQL 等資料庫包裝成雲端服務。
自動讀寫分離
Master DB(主資料庫)
├── 處理所有寫入操作(新增、修改、刪除)
├── 確保資料一致性
└── 位於主要可用區
Read Replica(從資料庫)
├── 只處理讀取操作
├── 可以建立多個(2-5 個都很常見)
├── 可以分散在不同地區
└── 自動從 Master 同步資料實際效益
沒有 Read Replica:
- 100 個讀取請求 + 10 個寫入請求 = 主資料庫處理 110 個請求
有 3 個 Read Replica:
- 主資料庫只處理 10 個寫入請求
- 100 個讀取請求分散給 3 台 Read Replica
- 每台平均只需處理 33 個讀取請求RDS 的其他強大功能
自動備份(Snapshot)
- 每天自動備份,保留 7-35 天
- 手動備份可以永久保留
- 幾分鐘內就能從備份還原整個資料庫
Multi-AZ 部署
- 主資料庫掛了,備援資料庫自動接手
- 切換過程只需 1-2 分鐘
- 對用戶來說幾乎無感
DynamoDB:為高併發而生
當你的應用寫入操作特別頻繁時(比如遊戲積分、即時聊天、IoT 數據),傳統資料庫可能還是不夠用。
DynamoDB 的特色
- 無限擴展:理論上可以處理任何流量
- 毫秒回應:單位數毫秒的查詢時間
- 全託管:不用管伺服器、備份、維護
實際應用場景
遊戲排行榜:每秒數千筆積分更新
購物車系統:大促期間瞬間流量
IoT 數據收集:數百萬設備同時傳送數據
用戶會話管理:數百萬用戶同時在線選擇指南
選擇 RDS 當你需要:
✓ 複雜的 SQL 查詢
✓ 嚴格的資料一致性
✓ 現有的 MySQL/PostgreSQL 程式碼
選擇 DynamoDB 當你需要:
✓ 極高的讀寫效能
✓ 無限擴展能力
✓ 簡單的鍵值查詢快取服務:ElastiCache
記得我們提到的「記憶功能」嗎?AWS 的 ElastiCache 就是專業的記憶系統。
支援兩大快取引擎
Redis
- 適合:複雜的快取需求
- 特點:支援資料結構(列表、集合、排序集合)
- 應用:排行榜、計數器、會話管理
Memcached
- 適合:簡單的鍵值快取
- 特點:純記憶體,速度極快
- 應用:頁面快取、查詢結果快取
實際使用效果
沒有快取的情況
用戶查詢「熱門商品」
→ 查詢資料庫(300ms)
→ 計算排序(200ms)
→ 回傳結果(總共 500ms)
如果有 1000 人同時查詢,資料庫要處理 1000 次相同計算有快取的情況
第一個用戶查詢「熱門商品」
→ 查詢資料庫(300ms)
→ 計算排序(200ms)
→ 存入快取
→ 回傳結果(總共 500ms)
接下來 999 個用戶查詢
→ 直接從快取取得(5ms)
→ 回傳結果
資料庫壓力減少 99.9%!快取策略設定
Cache-Through(直通快取)
應用程式 → 先查快取 → 沒有的話查資料庫 → 存入快取Write-Through(寫入直通)
資料更新時 → 同時更新資料庫和快取TTL(生存時間)設定
商品價格:TTL = 1小時(價格不常變動)
庫存數量:TTL = 5分鐘(庫存變化頻繁)
用戶資料:TTL = 24小時(個人資料相對穩定)檔案服務:S3 + CloudFront
還記得我們把檔案處理獨立出來的概念嗎?AWS 提供了世界級的解決方案。
S3:無限容量的檔案倉庫
Amazon S3 (Simple Storage Service) 是 AWS 最成功的服務之一。
S3 的特殊性質:Eventual Consistency
這是分散式系統的經典概念!S3 為了達到極高的可用性和效能,採用了「最終一致性」。
實際情況:
你在台北上傳一張照片 → 照片存到 S3
美國用戶立即查詢這張照片 → 可能暫時找不到(幾秒後就會有)
歐洲用戶查詢同一張照片 → 可能看到的是舊版本(很快就會更新)
為什麼這樣設計?
- 如果要求所有地區完全同步,系統會很慢
- 實際使用中,幾秒的延遲通常不是問題
- 換來的是近乎無限的擴展能力S3 的實用功能
版本控制(Versioning)
重要檔案被誤刪或覆蓋?不怕!
- 檔案的每次修改都會保留歷史版本
- 可以隨時回復到任何一個版本
- 像是檔案的「時光機」生命週期管理(Lifecycle)
根據檔案使用頻率自動調整儲存等級:
Standard:經常存取的檔案(成本較高)
↓ 30天後自動轉移
IA (Infrequent Access):不常存取的檔案(成本中等)
↓ 90天後自動轉移
Glacier:長期保存的檔案(成本很低,取回需要幾小時)
↓ 365天後自動轉移
Deep Archive:極少存取的檔案(成本最低,取回需要12小時)成本最佳化實例
電商網站的商品圖片:
- 新商品圖片:放在 Standard(快速載入)
- 3個月前的商品圖片:自動轉到 IA(節省50%成本)
- 1年前的過季商品圖片:自動轉到 Glacier(節省80%成本)CloudFront:全球加速網路
Amazon CloudFront 就是我們之前提到的 CDN 解決方案。
全球節點分布
AWS 在全球有 200+ 個 CloudFront 節點:
- 台灣:台北
- 中國大陸:北京、上海、深圳等
- 日本:東京、大阪
- 韓國:首爾
- 美國:各大城市都有
- 歐洲:倫敦、法蘭克福、阿姆斯特丹等實際加速效果
沒有 CloudFront
台灣用戶看美國伺服器上的影片:
台北 → 海底電纜 → 美國西岸 → 下載影片
延遲:150-200ms,下載速度:5-10 MB/s有 CloudFront
台灣用戶看影片:
台北 → 台北 CloudFront 節點 → 下載影片
延遲:5-10ms,下載速度:50-100 MB/s
第一個用戶請求時:CloudFront 從美國源伺服器下載
後續用戶請求:直接從台北節點提供,超快速!CloudFront 的智慧快取
動態內容加速
不只是靜態檔案,連動態內容也能加速:
- API 請求透過最佳路由
- SSL 加密在邊緣節點處理
- 壓縮優化在邊緣節點完成快取策略設定
圖片、CSS、JS:快取 24 小時
HTML 頁面:快取 1 小時
API 回應:快取 5 分鐘
用戶個人資料:不快取非同步服務:SQS + Lambda
還記得「不急的工作」概念嗎?AWS 提供了超強的非同步處理方案。
SQS:專業的工作排程系統
Amazon SQS (Simple Queue Service) 就是我們之前提到的「訊息佇列」。
SQS 的工作方式
影片上傳處理流程:
1. 用戶上傳影片 → EC2 主機快速回應「上傳成功」
2. 主機把工作訊息丟進 SQS:「請處理影片 video123.mp4」
3. SQS 把訊息排隊等待處理
4. 後台工作程序從 SQS 取得訊息開始處理
5. 處理完成後,工作程序刪除 SQS 中的訊息SQS 的可靠性保證
至少一次傳遞
- 確保每個訊息都會被處理到
- 即使處理程序當機,訊息也不會丟失
死信佇列(Dead Letter Queue)
如果某個工作一直處理失敗:
嘗試處理 3 次 → 還是失敗 → 送到死信佇列
管理員可以檢查死信佇列找出問題可見性超時
工作程序取得訊息後,其他程序暫時看不到這個訊息
如果工作程序當機,超時後訊息會重新出現讓其他程序處理Lambda:無伺服器的工作者
AWS Lambda 是革命性的「無伺服器」運算服務。
Lambda 的神奇之處
傳統方式:
- 你要租用 EC2 當工作伺服器
- 24小時都在跑,即使沒有工作也要付錢
- 要自己管理伺服器系統更新、安全設定
Lambda 方式:
- 不用租伺服器
- 只有在執行工作時才計費(以毫秒計算)
- AWS 幫你管理所有基礎設施實際成本比較
影片處理工作:每個影片處理需要 5 分鐘
EC2 方式:
- 租用 m5.large:每月台幣 3,000 元
- 一個月處理 1000 個影片 = 台幣 3,000 元
Lambda 方式:
- 每次執行收費:台幣 0.5 元
- 處理 1000 個影片 = 台幣 500 元
- 節省 83% 成本!SQS + Lambda 的完美組合
自動擴展
平常:沒有工作,Lambda 函數休眠,不花錢
突然來了 100 個影片要處理:
- SQS 接收 100 個訊息
- AWS 自動啟動 100 個 Lambda 函數同時處理
- 全部處理完後,Lambda 函數自動關閉實際架構範例
電商網站的訂單處理:
用戶下單 → EC2 快速回應「訂單成功」
→ SQS 接收「處理訂單 #12345」
→ Lambda 函數處理:
├── 檢查庫存
├── 發送確認郵件
├── 通知倉庫出貨
├── 更新會員積分
└── 發送簡訊通知監控與日誌:CloudWatch 全家桶
分散式系統最大的挑戰是「看不見」,AWS CloudWatch 就是你的眼睛和耳朵。
CloudWatch Metrics:系統健康監控
自動收集指標
EC2 指標:
- CPU 使用率
- 記憶體使用量
- 網路流量
- 磁碟 I/O
RDS 指標:
- 資料庫連線數
- 查詢執行時間
- 讀寫 IOPS
- 磁碟空間使用率
ELB 指標:
- 請求數量
- 錯誤率
- 回應時間
- 健康的目標數量自訂監控指標
業務指標監控:
- 每分鐘訂單數量
- 用戶註冊數
- 付款成功率
- 庫存告急商品數CloudWatch Alarms:智慧警報系統
設定警報範例
CPU 警報:
當 EC2 CPU > 80% 持續 5 分鐘
→ 觸發 Auto Scaling 增加機器
→ 發送 Email 通知管理員
資料庫警報:
當 RDS 連線數 > 100
→ 發送緊急簡訊給 DBA
→ 自動觸發資料庫效能調整
錯誤率警報:
當 API 錯誤率 > 5%
→ 立即通知開發團隊
→ 啟動緊急應變程序CloudWatch Logs:集中日誌管理
日誌統一收集
所有服務的日誌都送到 CloudWatch Logs:
EC2 應用程式日誌:
[2025-08-10 14:30:25] INFO: User 12345 logged in
[2025-08-10 14:30:26] ERROR: Payment failed for order 67890
Lambda 函數日誌:
[2025-08-10 14:31:00] START RequestId: abc123
[2025-08-10 14:31:05] INFO: Processing video upload
[2025-08-10 14:31:10] END RequestId: abc123
ELB 存取日誌:
2025-08-10T14:30:25.000Z elb-name 1.2.3.4:80 10.0.0.1:32768 0.001 0.002 200 0 234 345強大的日誌查詢
CloudWatch Insights 查詢語言:
找出所有錯誤:
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
分析 API 回應時間:
fields @timestamp, @duration
| filter @type = "REPORT"
| stats avg(@duration), max(@duration) by bin(5m)
追蹤特定用戶的操作:
fields @timestamp, @message
| filter @message like /User 12345/
| sort @timestamp ascSNS:多管道通知系統
Amazon SNS (Simple Notification Service) 負責把警報送到各種地方。
支援的通知方式
Email:發送詳細的警報郵件
SMS:緊急事件立即簡訊通知
Slack:發送到開發團隊群組
HTTP/HTTPS:觸發其他系統的自動回應
行動推播:發送到管理 App實際通知流程
系統偵測到問題:
1. CloudWatch 觸發 Alarm
2. Alarm 發送訊息到 SNS
3. SNS 同時發送:
├── Email 給所有管理員
├── 簡訊給值班工程師
├── Slack 訊息給開發團隊
└── 觸發自動修復程序完整架構總覽
讓我們看看用 AWS 建立的完整分散式架構:
架構圖解說
用戶請求
↓
CloudFront (全球 CDN)
↓
ELB (負載均衡器)
↓
EC2 Auto Scaling Group (運算叢集)
├─→ ElastiCache (快取層)
├─→ RDS Master + Read Replicas (資料庫層)
├─→ S3 (檔案存儲)
└─→ SQS + Lambda (非同步處理)
監控層:
CloudWatch (指標收集)
CloudWatch Logs (日誌管理)
SNS (警報通知)AWS 服務對應表
| 分散式架構組件 | AWS 服務 | 主要功能 |
|---|---|---|
| 運算服務 | EC2 + ELB + ASG | 處理業務邏輯,自動擴展 |
| 資料庫服務 | RDS / DynamoDB | 資料存儲,讀寫分離 |
| 快取服務 | ElastiCache | 加速查詢,減少資料庫負載 |
| 檔案服務 | S3 | 影音圖檔存儲 |
| 全球 CDN | CloudFront | 全球內容分發加速 |
| 非同步處理 | SQS + Lambda | 背景工作處理 |
| 監控系統 | CloudWatch | 指標監控,警報通知 |
| 日誌管理 | CloudWatch Logs | 集中日誌收集分析 |
| 通知服務 | SNS | 多管道警報通知 |
實際建置步驟建議
階段一:基礎架構(適合新創公司)
1. 建立 1-2 台 EC2 + ELB
2. 設定 RDS 資料庫
3. 基本 CloudWatch 監控
4. 估計成本:每月台幣 5,000-15,000 元階段二:效能優化(業務成長期)
1. 加入 ElastiCache 快取層
2. 設定 Auto Scaling Group
3. 導入 S3 + CloudFront
4. 估計成本:每月台幣 15,000-50,000 元階段三:高級架構(成熟企業)
1. 多 AZ 部署,提高可用性
2. 導入 Lambda + SQS 非同步處理
3. 完整監控警報系統
4. 多地區部署
5. 估計成本:每月台幣 50,000 元以上成本控制建議
善用 AWS 免費方案
新用戶第一年免費額度:
- EC2:750 小時 t2.micro
- RDS:750 小時 db.t2.micro
- S3:5GB 存儲空間
- CloudFront:50GB 流量
- Lambda:100 萬次免費執行節省成本的技巧
1. 使用 Reserved Instances(預留實例)
- 1年期:節省 30-40%
- 3年期:節省 50-60%
2. 使用 Spot Instances(競價實例)
- 適合非關鍵工作負載
- 可節省 50-90% 成本
3. 定期檢查資源使用率
- 關閉不必要的服務
- 調整過大的實例規格
4. 使用 AWS Cost Explorer
- 分析成本趨勢
- 找出優化機會結語
分散式架構聽起來複雜,但有了 AWS 這樣的雲端平台,實際建置變得相對簡單。
每個組件都有對應的託管服務,你不需要從零開始搭建,只要會組合使用這些服務就行。
記住幾個關鍵原則:
- 從小開始:不要一開始就建置最複雜的架構,根據實際需求逐步演進
- 監控優先:沒有監控的系統就像蒙著眼睛開車,一定要先建立監控機制
- 成本意識:雲端服務按使用量計費,要定期檢查和優化成本
- 安全第一:AWS 提供很多安全功能,不要為了方便而忽略安全設定
最重要的是,分散式架構不是目的,而是手段。它的目標是讓你的系統能夠穩定地服務更多用戶,創造更大的商業價值。
當你的用戶從一百人成長到一百萬人時,這套架構會是你最可靠的後盾。
現在你已經了解了完整的概念,下一步就是動手實作。
AWS 提供了詳細的文檔和教學,加上充足的免費額度,正是開始學習的最佳時機。
從建立第一台 EC2 開始,慢慢體驗分散式架構的魅力吧!