使用 AWS 建立分散式雲端架構:完整實戰指南

Published August 11, 2025 by 徐培鈞
架構

在前一篇文章中,我們詳細了解了分散式架構的演進過程:從單台主機開始,因為流量增長而逐步拆分成運算服務、資料庫服務、檔案服務、快取服務等專業分工的架構。

但是,理論歸理論,實際要建立這樣的系統時該怎麼做呢?

這就是雲端服務的價值所在。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 asc

SNS:多管道通知系統

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
主要功能處理業務邏輯,自動擴展
AWS 服務RDS / DynamoDB
主要功能資料存儲,讀寫分離
AWS 服務ElastiCache
主要功能加速查詢,減少資料庫負載
AWS 服務S3
主要功能影音圖檔存儲
AWS 服務CloudFront
主要功能全球內容分發加速
AWS 服務SQS + Lambda
主要功能背景工作處理
AWS 服務CloudWatch
主要功能指標監控,警報通知
AWS 服務CloudWatch Logs
主要功能集中日誌收集分析
AWS 服務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 這樣的雲端平台,實際建置變得相對簡單。

每個組件都有對應的託管服務,你不需要從零開始搭建,只要會組合使用這些服務就行。

記住幾個關鍵原則:

  1. 從小開始:不要一開始就建置最複雜的架構,根據實際需求逐步演進
  2. 監控優先:沒有監控的系統就像蒙著眼睛開車,一定要先建立監控機制
  3. 成本意識:雲端服務按使用量計費,要定期檢查和優化成本
  4. 安全第一:AWS 提供很多安全功能,不要為了方便而忽略安全設定

最重要的是,分散式架構不是目的,而是手段。它的目標是讓你的系統能夠穩定地服務更多用戶,創造更大的商業價值。

當你的用戶從一百人成長到一百萬人時,這套架構會是你最可靠的後盾。

現在你已經了解了完整的概念,下一步就是動手實作。

AWS 提供了詳細的文檔和教學,加上充足的免費額度,正是開始學習的最佳時機。

從建立第一台 EC2 開始,慢慢體驗分散式架構的魅力吧!