跳至主要內容
ESC
pca-architect-journey — 第 12/13 篇

PCA 架構之旅 12 — 災難復原 (DR)

PCA

第 11 步解決了「單 zone / 單 region 內元件壞掉」的問題。但 PCA 還會問你更殘酷的情境:整個 region 整天不見、光纖被挖斷、自然災害。這時候你靠的不是 autoscaling,而是 DR 計畫。

DR 的關鍵字就兩個:RTO 跟 RPO。能聽懂這兩個詞、能把它們翻成架構選擇,這一步的核心你就抓到了。


為什麼這一步重要

PCA case study 常用這類句子測試 DR 理解:

  • 「主 region 失效後,服務必須在 1 小時內恢復」→ RTO
  • 「最多可以接受遺失 15 分鐘的交易資料」→ RPO
  • 「金流系統零資料遺失」→ RPO = 0(意味著同步複寫)

考生最常犯的錯誤:

  1. RTO 跟 RPO 搞混:RTO 是「多久能復原」、RPO 是「能容忍遺失多少資料」,兩個是獨立的目標
  2. RPO = 0 還選 Cloud SQL cross-region read replica:read replica 是非同步複寫,本質上有 lag,不可能 RPO = 0
  3. 把備份當 DR:備份是「資料救回來」,DR 是「服務跑起來」。光有備份沒有啟動流程也是失敗

核心概念

四種常見 DR 策略與對應的 RTO / RPO 區間(以登雲書店量級為例,實際數字依設計而定):

策略RTORPO成本何時選
Backup & Restore小時到天小時(看備份頻率)最低非關鍵系統、預算有限
Pilot Light數十分鐘分鐘中低DR region 只有核心元件,需要時放大
Warm Standby分鐘秒到分鐘中高DR region 全副部署但低規模運行
Multi-region Active-Active接近 0接近 0最高金融、不能停機、全球低延遲

PCA 一定要記住的兩個定義:

  • RTO(Recovery Time Objective):從災難發生到服務恢復的最長可容忍時間
  • RPO(Recovery Point Objective):災難發生時最多可容忍遺失的資料時間窗

GCP 上的 DR 主力工具:

  • Cloud Storage 跨 region 複製(dual-region、multi-region bucket)
  • Cloud SQL cross-region read replica(非同步)或升級到 Spanner(跨 region 同步複寫)
  • Spanner 多 region instance(同步複寫、全球單一邏輯資料庫,寫入經單一 leader region 協調,可做到跨 region 讀寫高可用)
  • Cloud DNS failover routing policy(自動切 DR region 的 LB)
  • Persistent Disk snapshot 跨 region(multi-regional snapshot)

思考框架

DR 決策按這個順序問:

  1. 業務能忍受多長的停機? → 決定 RTO → 反推 DR 策略
  2. 資料遺失多少會造成法律 / 財務衝擊? → 決定 RPO → 反推複寫方式
  3. 預算有多少? → Active-Active 最貴(等同蓋兩套)、Backup & Restore 最便宜
  4. 有沒有法規要求地理分離? → 個資法、GDPR 可能要求 DR 跨國或跨大陸
  5. DR 演練多久做一次? → 沒演練過的 DR 計畫等同沒有,考題常考這點

走一遍範例 — 登雲書店

登雲書店不同模組的 DR 目標不一樣,要分層處理:

金流與訂單(極關鍵)

  • 目標:RTO < 15 分鐘、RPO ≈ 0
  • 策略:Multi-region Active-Active 或接近的方案
  • 實作:Spanner 配置 nam-eur-asia1(多 region),訂單服務部署在兩個 region,Global LB 自動路由
  • 成本取捨:貴,但符合金流不能遺失的要求

會員資料(關鍵)

  • 目標:RTO < 1 小時、RPO < 5 分鐘
  • 策略:Warm Standby
  • 實作:Cloud SQL PostgreSQL HA 在 asia-east1,另加一個 cross-region read replica 在 asia-northeast1。DR 啟動時 promote replica 成新 primary
  • 關鍵檢核:每季演練一次 failover,驗證 RTO 真的達標

商品圖片與靜態資源

  • 目標:RTO ≈ 0、RPO < 15 分鐘(需啟用 turbo replication)
  • 策略:dual-region Cloud Storage bucket
  • 實作:bucket location 設為 configurable dual-region(asia-east1 彰化 + asia-northeast1 東京,而非預定義的 asia1,因為 asia1 實際是 asia-northeast1 東京 + asia-northeast2 大阪),並啟用 turbo replication 以取得 15 分鐘 RPO(SLA 保證);未啟用時預設複寫 RPO 為 12 小時(通常 1 小時內完成),自動雙向複寫

瀏覽紀錄(非關鍵)

  • 目標:RTO < 24 小時、RPO < 4 小時
  • 策略:Backup & Restore
  • 實作:Bigtable 每 4 小時 export 到 GCS multi-region bucket。災難時重建 Bigtable cluster,從最近的 backup 匯入
  • 理由:瀏覽紀錄失去幾小時不影響核心業務,不值得花 active-active 的錢

流量切換機制

  • Cloud DNS 設 failover routing policy,health check 連到 asia-east1 的 Global LB
  • DR region 的 Global LB 平時關閉,DR 演練時手動啟用或用 Terraform 快速布建(pilot light 概念)

PCA 實務題常問這一點:「商品圖片的 dual-region bucket,如果 asia-east1 掛了,讀寫會怎樣?」答案:讀會自動切到另一個 region 的副本;寫會暫時失敗,等到 Google 把 bucket 的 metadata primary 切換(通常是分鐘級)才恢復。這裡要注意,dual-region 的複寫是非同步的。RTO 趨近於 0,因為已複寫的資料在區域故障時還讀得到;但 RPO 沒辦法接近 0,區域一掛,那些還沒複寫完的資料就遺失了。遺失窗口看你有沒有開 turbo replication:預設最壞是 12 小時、99.9% 物件 1 小時內;turbo 則是 15 分鐘 SLA。所以真要做到 RPO < 1 分鐘,光靠 dual-region 預設複寫是不夠的,得另外評估同步機制。


常見陷阱

  1. 把備份放在同一個 region:備份在 asia-east1 的 bucket,asia-east1 整個 region 掛了,備份跟著消失。DR 用的備份必須放 multi-region 或 dual-region bucket,或複製到另一個 region。
  2. 忽略 DR 演練:考試會問「你怎麼確認 DR 計畫有用?」答案是定期演練(game day),通常每季或每半年一次。寫在文件裡的 RTO 沒演練過,災難時通常會失敗。
  3. 跨 region 同步 = 零成本延遲:Spanner 跨 region 寫入需要 Paxos 多數派投票,單筆寫入延遲會從個位數 ms 變成數十 ms。必須在應用端評估這個延遲是否可接受。

延伸閱讀


系列導航

🎯 換你練習

理論讀完,換自己來。到 架構師設計工作坊 · 步驟 12 填入你的 case study,邊寫邊內化。

pca-architect-journey — 12/13 完成 查看系列全覽 →

留言討論

徽章解鎖!