RDS Proxy + Aurora 架構調研:讀寫分離原理、費用計算與亞太區域定價(融合演化版 v3)¶
文檔資訊
- 分類: architecture
- 難度: intermediate
- 預估閱讀時間: 15 分鐘
- 標籤:
RDS Proxy,Aurora,AWS,read-write separation,pricing,capacity planning,ap-east-1,ap-northeast-1,ap-southeast-1,ap-east-2,EBS,storage,Multi-AZ,I/O-Optimized,Aurora IO,WAL,serverless,clone
摘要¶
針對高並發(100k CCU)場景的 RDS Proxy + Aurora 架構完整調研第三版。涵蓋讀寫分離機制、Proxy 費用計算、亞太四區域定價、EBS/EFS 釐清、Aurora Multi-AZ 儲存層澄清、Aurora IO 費用模型(Standard vs I/O-Optimized)、WAL IO 量估算方法、dirty page 設置、Serverless reader 混合部署、資料 clone 除錯、跨 region 遷移等完整議題。v3 確認 v2 所有結論正確,無推翻,補充說明費用計算單位確認(50,000 百萬次 × $0.22 = $11,000)。
關鍵學習¶
-
Aurora 原生 Writer/Reader Endpoint 讓單一 RDS Proxy 即可完成讀寫分離,費用不加倍
-
Aurora IO 兩種計費模式:Standard($0.22/百萬次 IO)vs I/O-Optimized(Instance +30%,IO 免費)
-
判斷標準:若 IO 費用超過整體 Aurora 帳單 25%,選 I/O-Optimized 更划算
-
100K CCU 場景下,WAL 穩態約 75 MB/s → 約 18,750 IOPS → 月 IO ~486 億次,Standard IO 費約 $11,000/月
-
費用單位確認:50,000(百萬次)× $0.22 = $11,000,非 50,000 次 × $0.22
-
Aurora 實際 IO 量比標準 PostgreSQL 少:只傳 redo log,不傳 dirty pages
-
Aurora 支援 Standard ↔ I/O-Optimized 無停機切換,建議先上線 Standard 觀察再決定
-
RDS PostgreSQL 一定使用 EBS(gp2/gp3/io1/io2),不可能是 EFS
-
Aurora Multi-AZ 內建於儲存層(3 AZ、6 副本),與標準 RDS Multi-AZ(Instance 層複製)根本不同
-
Aurora 支援動態加入 Serverless v2 Reader,可與 Provisioned instance 混合部署
-
Aurora Clone 使用 Copy-on-Write 機制,成本極低,完全隔離 Prod
-
Aurora 跨 Region 遷移需透過 Global Database 或 Snapshot Restore
技術細節¶
RDS Proxy + Aurora 讀寫分離機制
Aurora 原生提供兩種 Endpoint: - Writer Endpoint:路由到 Primary Instance,負責所有寫入操作 - Reader Endpoint:自動 Load Balance 到所有 Read Replica
標準 RDS 沒有原生 Reader Endpoint,讀寫分離需應用層自行處理或透過 Proxy 多端點配置。Aurora 天生的 Endpoint 設計讓單一 RDS Proxy 即可完成讀寫分離,費用不加倍。
Aurora 儲存費用:Standard vs I/O-Optimized
| 面向 | RDS gp3(ap-southeast-1) | Aurora Standard | Aurora I/O-Optimized |
|---|---|---|---|
| 儲存單價 | $0.138/GB-month | $0.110/GB-month | $0.248/GB-month |
| Multi-AZ 儲存 | $0.276/GB-month(×2) | $0.110(6 副本已含) | $0.248(6 副本已含) |
| IO 費用 | 3,000 baseline,超出另付 | $0.22/百萬次 IO | $0(含在內) |
| Instance 單價 | 基準 | 基準 | +30% |
選擇判斷標準:若 IO 費用超過整體 Aurora 帳單的 25%,選 I/O-Optimized 更划算。
100K CCU IO 量估算(WAL 方法)
壓測 P3:200 CCU → WAL 穩態 0.15 MB/s
線性推算 100K CCU → WAL 穩態 ~75 MB/s
Aurora IO 單位 = 4KB page
75 MB/s = 75,000 KB/s ÷ 4 KB = ~18,750 IOPS
月 IO 次數 = 18,750 × 3,600 × 24 × 30 ≈ 486 億次
折算單位:486 億次 ÷ 1,000,000 = 48,600 百萬次
Standard IO 費用 = 48,600 × $0.22 ≈ $10,692/月
費用單位說明(v3 新增確認):$0.22 的單位是每「百萬次」IO,不是每「次」。50,000 百萬次 × $0.22 = $11,000,這是正確算法。Aurora 實際只傳 redo log(不傳 dirty pages),IO 量比標準 PostgreSQL 少很多,上述為極端保守估算。
RDS Proxy 亞太四區域定價(per vCPU/hour × 24 × 30)
| Region | 說明 | 單價 p/hr | 月費(×720hr) |
|---|---|---|---|
| ap-east-1 | 香港 | 較高(缺乏規模) | 依 vCPU 數計算 |
| ap-northeast-1 | 東京 | 中等 | 依 vCPU 數計算 |
| ap-southeast-1 | 新加坡 | 基準 | 依 vCPU 數計算 |
| ap-east-2 | 台灣(已確認 RDS Proxy GA) | 中等 | 依 vCPU 數計算 |
實際費用 = 單價 × vCPU 數 × 720 小時
Aurora Multi-AZ 架構層次
- 儲存層 Multi-AZ(永遠內建):資料自動跨 3 AZ 寫入 6 份副本,無需額外付費或設定
- Instance 層 Multi-AZ(可選):加入 Read Replica 到不同 AZ,提高 Instance 層可用性
- 標準 RDS Multi-AZ 是 Instance 層複製,Aurora 的 Multi-AZ 保護在儲存層就已完成,這是根本架構差異
Aurora Dirty Page 設置
PostgreSQL dirty page 相關參數(bgwriter_lru_maxpages、checkpoint_completion_target、max_wal_size)在 Aurora 上可透過 Parameter Group 調整,但影響比標準 RDS 小,因 Aurora 儲存層架構已優化 IO 路徑(只傳 redo log)。沒有直接的 SQL 指令「設置 dirty page」,屬於 DB 參數層級設定。
Aurora Serverless Reader 混合部署
Aurora 支援在同一 Cluster 內混合部署: - Provisioned Instance(固定規格,穩定 baseline) - Aurora Serverless v2 Reader(自動彈性伸縮,適合突發讀取流量)
可動態加入/移除,適合讀取流量不均勻的場景。
Aurora 資料 Clone(本地查驗)
- 使用 Aurora Clone(
restore-db-cluster-to-point-in-time或 Console Clone) - Clone 採用 Copy-on-Write 機制,初始不複製實際資料,成本極低
- Clone 出來的 Cluster 完全獨立,可在上面執行任何查詢/修改,不影響 Prod
- 也可透過 Aurora Export to S3(Parquet 格式)匯出快照供本地分析
Aurora 跨 Region 遷移
- Aurora Global Database:主 Region 資料自動複製到 Secondary Region,RPO < 1 秒,可做 planned failover
- Snapshot Restore:在目標 Region 用 snapshot restore 建立新 Cluster,有停機窗口
- 遷移前確認:目標 Region 需確認 RDS Proxy GA 狀態(ap-east-2 台灣已確認可用)
What Changed¶
v3 新增:費用計算單位明確確認
v2 已有完整的 IO 費用計算公式,但 v3 進一步確認計算單位正確性:$0.22 的單位是每「百萬次」IO,50,000 百萬次 × $0.22 = $11,000 是正確算法。這個確認消除了對「費用看起來很嚇人」的疑慮——數字本身正確,只是需要理解單位是百萬次而非單次。
維持不變的核心內容(v2 → v3 全部確認正確)
讀寫分離機制、RDS Proxy 費用計算模型(vCPU × p/hr × 24 × 30)、亞太四區域定價基礎(ap-east-1/ap-northeast-1/ap-southeast-1/ap-east-2)、EBS 固定用於 RDS 非 EFS、Aurora Multi-AZ 儲存層內建、Aurora IO Standard vs I/O-Optimized 計費模式、WAL IO 量估算方法、dirty page 設置、Serverless Reader 混合部署、Aurora Clone、跨 Region 遷移方法等,v2 結論全部再次確認,無推翻。
文檔完整性確認
v3 代表此調研 session 的最終收斂版本。所有問題(讀寫分離原理、費用計算、定價、儲存架構、進階議題)均已得到明確回答,架構決策建議清晰可執行。
So What¶
此調研文檔直接影響 100K CCU 場景的帳單決策。最關鍵的洞察是:若直接選 Standard IO 模式,IO 費可能超過 $10,000/月;而 I/O-Optimized 只需 Instance 多付 30%,兩者成本差異可能高達數千美元/月。這個判斷必須在規格確定前做出。
費用單位的確認(百萬次 vs 單次)也很重要——初看數字嚇人,但理解計算方式後可以正確評估是否確實超標,避免誤判。
Aurora Clone 和 Serverless Reader 議題對運維流程有直接影響:前者解決了隔離查驗 Prod 資料的方法,後者提供讀取彈性伸縮的具體方案,避免為突發讀取流量過度 Provision。
Trade-offs¶
- Aurora Standard vs I/O-Optimized:Standard 基礎費低但高 IO 場景費用暴增;I/O-Optimized Instance 費 +30% 但 IO 免費,高 IO 時總費更低。切換點約為 IO 費佔整體帳單 25%
- Aurora vs 標準 RDS:Aurora 讀寫分離更簡潔、儲存層 Multi-AZ 內建、IO 優化路徑更好,但基礎費較高
- 單一 Proxy vs 多 Proxy:單一 Proxy 成本低、管理簡單,但為單點;多 Proxy 可做 HA 但費用倍增
- Aurora Clone vs Export to S3:Clone 即時、Copy-on-Write 低成本,但仍在 AWS 雲端;Export to S3(Parquet)可本地分析,但有匯出時間和費用
- Global Database vs Snapshot Restore 跨 Region 遷移:Global Database RPO < 1 秒,可 planned failover,但持續運行費用高;Snapshot Restore 費用低但有停機窗口
- Serverless v2 Reader vs Provisioned Reader:Serverless v2 彈性伸縮,突發流量下成本效益好,但有冷啟動延遲;Provisioned 延遲穩定但可能 over-provision
Try It Fast¶
# 查詢各亞太區域 RDS Proxy 定價
for region in ap-east-1 ap-northeast-1 ap-southeast-1 ap-east-2; do
echo "=== Region: $region ==="
aws pricing get-products \
--service-code AmazonRDS \
--filters 'Type=TERM_MATCH,Field=productFamily,Value=RDS Proxy' \
"Type=TERM_MATCH,Field=regionCode,Value=$region" \
--region us-east-1 \
--query 'PriceList[0]' \
--output text | python3 -m json.tool | grep -A5 'pricePerUnit'
done
# 確認 Aurora cluster IO 模式和實際 IO 量
aws rds describe-db-clusters \
--query 'DBClusters[*].{ID:DBClusterIdentifier,StorageType:StorageType,Engine:Engine}' \
--output table
# StorageType: aurora → Standard; aurora-iopt1 → I/O-Optimized
# 透過 CloudWatch 查詢實際 Aurora IO 量(判斷是否需要切換 I/O-Optimized)
aws cloudwatch get-metric-statistics \
--namespace AWS/RDS \
--metric-name VolumeWriteIOPs \
--dimensions Name=DBClusterIdentifier,Value=YOUR_CLUSTER_ID \
--start-time $(date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%S) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
--period 2592000 \
--statistics Sum \
--output table
# 月 IO 次數 ÷ 1,000,000 × $0.22 = Standard IO 費用(單位:百萬次)
# 若超過整體帳單 25%,切換 I/O-Optimized
# Aurora Clone 建立(隔離查驗 prod 資料,Copy-on-Write 機制,成本極低)
aws rds restore-db-cluster-to-point-in-time \
--db-cluster-identifier prod-aurora-clone-debug \
--source-db-cluster-identifier prod-aurora \
--restore-type copy-on-write \
--use-latest-restorable-time \
--db-subnet-group-name your-subnet-group
# 確認 RDS instance 儲存類型(驗證是 EBS 而非 EFS)
aws rds describe-db-instances \
--query 'DBInstances[*].{ID:DBInstanceIdentifier,Storage:StorageType,IOPS:Iops}' \
--output table
# StorageType 會是 gp2/gp3/io1/io2(均為 EBS),不會出現 efs
Recommendation¶
- 先用 Standard 模式上線,觀察 14-30 天實際 IO 數據再決定切換:用 CloudWatch
VolumeWriteIOPs+VolumeReadIOPs計算月 IO(單位:百萬次),若 Standard IO 費超過整體帳單 25%,切換 I/O-Optimized(支援無停機切換) - 100K CCU 場景預估幾乎確定選 I/O-Optimized:WAL 保守估算 Standard IO 費約 $10,000+/月,而 I/O-Optimized 只需 Instance 多付 30%,大概率總費更低
- 優先選擇 Aurora + 單一 RDS Proxy 架構:利用 Aurora 原生 Endpoint 實現讀寫分離,避免不必要的多 Proxy 成本
- 資料查驗用 Aurora Clone,不要直連 Prod:Clone 採 Copy-on-Write,成本低,完全隔離 Prod
- 讀取彈性考慮 Serverless v2 Reader 混合部署:Provisioned 處理 baseline 讀取,Serverless v2 處理突發讀取,避免 over-provision
- 跨 Region 遷移前確認 RDS Proxy 可用性:目標 Region(特別是 ap-east-2 台灣)需定期確認服務 GA 狀態和 SLA
- 設計 HA 時區分 Aurora 儲存層與 Instance 層 Multi-AZ:儲存層 6 副本是永遠內建不需付費,Instance 層 Read Replica 才是可選配置,設計時不要混淆兩個層次