跳至主要內容
PCA 雲端架構師之旅 — 第 12/13 篇

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

內文字級

PCA 雲端架構師之旅 12 — 災難復原 (DR)
更新:2026-10-12

前一步處理了單一元件或 Zone 故障。若整個 Region 都無法使用,或地端機房長時間中斷,就需要另外準備復原計畫;自動擴縮和健康檢查無法代替這一步。

先確認兩個數字:最多能停多久(RTO),以及最多能接受遺失多久的資料(RPO)。有了目標,才能比較備份還原、Pilot Light、Warm Standby 或 Active-Active 的成本與準備工作。

這是 PCA 雲端架構師之旅 的第 12 步。

Backup Restore、Pilot Light、Warm Standby 與 Active Active 四種 DR 策略隨成本上升而降低 RTO 與 RPO 的階梯圖

從備份還原到 Active-Active,常駐資源通常越來越多,故障時要啟動的工作則越來越少。但資料損失取決於複寫與提交方式,不能只看策略名稱;實際 RTO/RPO 要用演練驗證。


先分清楚:服務何時恢復,資料會退回多久?

RTO 和 RPO 常被放在一起講,但回答的是不同問題:

RTO(Recovery Time Objective)是「災難發生後,多久之內服務要重新跑起來」。RPO(Recovery Point Objective)是「恢復後的資料,最多可以退回到多久以前」。一個關心停機時間,一個關心資料落後的時間,兩者要分開訂。

case study 不會直接寫「RTO = 1 小時」這麼方便,它會包在情境句裡,等你自己翻譯:

  • 「主 region 失效後,服務必須在 1 小時內恢復」→ 這是在講 RTO
  • 「最多可以接受遺失 15 分鐘的交易資料」→ 這是在講 RPO
  • 「金流系統不能遺失已確認的交易」→ 要討論 RPO = 0,以及哪些寫入才算已確認

零資料遺失不能只靠備份頻率保證。必須定義交易何時算提交,並確認複寫與故障切換能否保住已提交資料;同步複寫是可能的設計手段,但會增加延遲與成本。

只在 DR 文件裡填好 RTO、RPO 還不夠。要確認備份能還原、環境能啟動、流量能切換,並讓負責的人演練過流程。備份回答「資料救不救得回來」,DR 還要回答「服務多久能恢復」。

📝 考場提點

讀 DR 題時,把「多久恢復」和「最多能失去多久的資料」分別標出來。「1 小時內恢復」對應 RTO;「最多遺失 15 分鐘資料」對應 RPO。接著再問故障範圍與資料價值:金流不一定要 Active-Active,分析資料也未必只靠便宜備份就夠,仍得看題目給的服務要求。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  S[災難情境敘述] --> T{描述多久要恢復服務?}
  T -- 是 --> RTO[記為 RTO<br/>災難後的停機上限]
  T -- 否 --> D{描述最多能丟<br/>多久的資料?}
  D -- 是 --> RPO[記為 RPO<br/>災難前的資料缺口]
  D -- 否 --> Q[回查業務衝擊與資料重要性]
  RTO --> A[決定待命容量與切換自動化]
  RPO --> B[決定備份頻率與複寫模式]
  Q --> RTO
  Q --> RPO
RTO 往災難後看服務停多久,RPO 往災難前看能丟多久的資料;兩個數字分別驅動容量切換與資料複寫設計。
災難復原時間線:09:45 最後可還原資料到 10:00 災難為 RPO 15 分鐘,10:00 到 10:30 服務恢復為 RTO 30 分鐘

RPO 往災難發生前看,量的是最多可能遺失多久的資料;RTO 往災難後看,量的是服務最多能停多久。RPO 決定備份或複寫頻率,RTO 則影響待命容量與切換自動化程度,不同工作負載不該共用同一組數字。


四種 DR 策略,差在平時準備多少

四種常見策略的差別,不是貼上名稱後就有固定 RTO/RPO,而是平時保留多少資源、故障時還要完成哪些步驟:

策略平時保留什麼故障時還要做什麼持續成本
Backup & Restore備份、設定與復原程序還原資料、部署並驗證服務較低
Pilot Light核心資料與最少必要基礎設施擴大容量、啟動服務並切換流量中低
Warm Standby較小規模的可運行備援環境擴容、確認資料狀態並切換流量中高
Multi-region Active-Active多個區域同時承接正式流量隔離故障、重新分配流量並核對資料較高

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

常駐資源和複寫越多,平時成本通常越高;只靠備份,則要把還原和驗證的時間算進去。每種策略能否達到指定 RTO/RPO,仍要看資料複寫方式並透過演練確認。

不是所有資料都需要 Active-Active。像可以重新產生的縮圖快取,可能不值得負擔跨區同步成本;交易紀錄則要依可容忍的資料遺失與停機時間設計。先替工作負載分級,再選對應的復原方式。

比較方案前,先把兩個指標分開:

  • RTO(Recovery Time Objective):從災難發生到服務恢復的最長可容忍時間
  • RPO(Recovery Point Objective):災難發生時最多可容忍遺失的資料時間窗
查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  W[工作負載的 RTO/RPO] --> Z{接近零停機且<br/>零資料損失?}
  Z -- 是 --> A[Multi-region<br/>Active-Active]
  Z -- 否 --> M{必須在數分鐘恢復?}
  M -- 是 --> W1[Warm<br/>Standby]
  M -- 否 --> P{可接受數十分鐘<br/>且能自動放大?}
  P -- 是 --> L[Pilot Light]
  P -- 否 --> B[Backup & Restore]
  A --> C[估算常駐資源與複寫成本]
  W1 --> C
  L --> C
  B --> C
  C --> V{仍符合業務預算?}
  V -- 否 --> W
  V -- 是 --> D[寫入 DR runbook]
從最便宜的方案開始往上比,直到能達成 RTO/RPO;若成本無法承擔,就回頭協商目標,而不是直接宣稱最貴方案。

GCP 上你會用到哪些工具

策略選好了,落到 GCP 上就是這幾樣東西在撐:

  • Cloud Storage 跨 region 複製——dual-region 或 multi-region bucket,物件自動跨地理位置存放。
  • Cloud SQL cross-region read replica——使用非同步複寫,來源與副本之間可能有延遲。若 RPO 要更短,需另外評估資料架構與複寫語意。
  • Spanner 多 region instance——同步複寫、全球單一邏輯資料庫,寫入經單一 leader region 協調,可做到跨 region 讀寫高可用。
  • Cloud DNS failover routing policy——健康檢查掛了就自動把流量導去 DR region 的 LB。
  • Persistent Disk snapshot 跨 region——multi-regional snapshot,VM 那一層的救命稻草。

Cloud SQL 的跨區 read replica 使用非同步複寫,來源與副本之間可能有延遲。因此不能只靠這個副本承諾 RPO = 0;若需求真的要求零資料遺失,還要另外評估能提供同步語意的資料架構,以及它對寫入延遲的影響。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  R[資料的 RPO 需求] --> Z{RPO 必須等於 0?}
  Z -- 是 --> S[同步跨 region 複寫<br/>例如 Spanner]
  Z -- 否 --> M{RPO 要壓到分鐘級?}
  M -- 是 --> A[非同步複寫+監控 lag<br/>或 Turbo Replication]
  M -- 否 --> B[定期備份/匯出]
  S --> L[承擔較高寫入延遲<br/>與成本]
  A --> V[持續驗證實際複寫延遲]
  B --> T[定期測試可還原性]
  L --> D[確認業務取捨]
  V --> D
  T --> D
非同步 replica 與 dual-region bucket 都存在資料缺口;RPO 0 需要同步複寫,也必須接受額外寫入延遲與成本。

走一遍範例 — 登雲書店

登雲書店這種規模,最忌諱「整站一個 DR 等級」。書店裡的訂單金流跟首頁的商品縮圖,重要程度差了十萬八千里,DR 目標當然要分層。把系統拆開來看:

金流與訂單(極關鍵)

  • 目標:RTO < 15 分鐘、RPO ≈ 0
  • 策略:Multi-region Active-Active 或接近的方案
  • 實作:RPO 要到 0,得用同步複寫的多區域資料庫,例如 Spanner 多 region 設定 asia1(讀寫區在東京與大阪、見證區在首爾);訂單服務部署在兩個 region,Global LB 自動路由
  • 成本取捨:貴,但金流的錢一分都不能丟,這裡省不得
  • 和前面選型的關係:第 8 步是在「目前只在台灣營運」的前提下,把訂單主檔放在 Cloud SQL。但 Cloud SQL 的跨區域副本是非同步複寫,區域故障時最近提交的交易可能遺失,RPO 做不到 0;金流若真的要求 RPO ≈ 0,這一層才需要換成 Spanner,費用要另外估,第 13 步的成本表也沒有算進去。

會員資料(關鍵)

  • 目標: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-southeast1 新加坡;兩個 region 必須屬於同一個 location code,ASIA 底下目前只有這一組可配,asia-northeast1 東京 + asia-northeast2 大阪則是預定義的 asia1),並啟用 turbo replication 以取得 15 分鐘 RPO(設計目標,不是逐一物件的保證;SLA 以每月符合率計:複寫時間 ≥ 99.0%、複寫量 ≥ 99.9%);未啟用時預設複寫 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 探測主要入口(Global External Application LB 的 VIP;它是全域資源,不屬於單一 region),備援端點指向 DR region 的 regional external Application LB
  • DR region 的備援入口(regional external Application LB)與後端平時只留最小配置,DR 時再手動或用 Terraform 把其餘容量布建起來——這就是 pilot light 的概念:平時只留最小骨架,需要時才放大

注意這幾層怎麼對應到前面那張表:金流是 Active-Active、會員是 Warm Standby、流量入口是 Pilot Light、瀏覽紀錄是 Backup & Restore,圖片則靠 dual-region bucket 的內建複寫。同一個案例裡好幾種策略並存,這才是真實架構長的樣子,也是設計 DR 時要練習分層的地方。

dual-region bucket 掛了一邊會怎樣

這個細節值得先弄清楚:「商品圖片的 dual-region bucket,如果 asia-east1 掛了,讀寫會怎樣?」

讀的部分會自動切到另一個 region 的副本,使用者大概無感。寫入也不需要手動切換:dual-region bucket 是單一 bucket,metadata 一律同步寫到多個 region,區域故障時服務不中斷。真正的風險在還沒完成非同步複寫的新物件,區域恢復前讀不到。

關鍵在於:dual-region 的複寫是非同步的。 所以 RTO 趨近於 0,因為已經複寫過去的資料在區域故障時還讀得到;但 RPO 沒辦法接近 0,因為區域一掛,那些還沒複寫完的資料在區域恢復前讀不到,實體毀損時還可能真的遺失。還沒複寫完的資料最多會累積多久,取決於你有沒有開 turbo replication:預設複寫的目標是 12 小時內全部完成(99.9% 的物件 1 小時內);開了 turbo 則是 15 分鐘的複寫目標(SLA 另訂符合率門檻,不是每個物件都保證 15 分鐘)。

Cloud Storage 建立值區畫面,位置類型選 Dual-region,兩個地區為 asia-east1(台灣)與 asia-southeast1(新加坡),游標停在尚未勾選的「新增強化型複製功能」(Turbo replication)核取方塊上,右側定價顯示兩個地區各每月每 GB US$0.022,另有「啟用預設複製功能」每 GB 寫入量 US$0.080

這一格就是把 DR 的 RPO 從口號變成數字的地方:預設的跨區複寫目標是 12 小時內完成,勾下「強化型複製(Turbo replication)」才把複寫目標縮到 15 分鐘——但複製費也跟著變貴:右邊列的 US$0.080 是還沒勾選時的預設複製費(每 GB 寫入量),依官方定價,亞洲 dual-region 啟用 Turbo 後是每 GiB US$0.11,所以這個勾不是每個 bucket 都值得打,只留給「頂多只能丟 15 分鐘」的資料。還有個容易忽略的細節:configurable dual-region 的兩個 region 必須屬於同一個 location code,這裡洲別選了亞太地區,地區選單列出的就是可以成對的組合(此圖是 asia-east1 台灣和 asia-southeast1 新加坡)——別以為隨便挑兩個 region 都能湊成一對。

如果題目要求非常短的 RPO,不能只看到 dual-region 就認定符合;要查複寫模式、目標時間與失敗時的資料損失範圍。案例裡金流與圖片採不同儲存方式,也是因為兩者可容忍的資料遺失不同。

📝 考場提點

Dual-region 與 multi-region bucket 會跨區非同步複寫,不能直接拿來承諾 RPO = 0。Cloud Storage 的預設複寫目標是 12 小時;dual-region bucket 可另外啟用 turbo replication,將目標縮到 15 分鐘,但仍不是零。物件能否讀取,也不等於整個應用已在 RTO 內恢復。資料庫則要另查其複寫和故障切換方式,例如 Cloud SQL 跨區 read replica 使用非同步複寫,不能單靠它保證已提交交易零遺失。(參考:Cloud Storage 資料可用性與耐久性、Cloud SQL 跨區複寫)


災難演練要檢查哪些事?

有些問題光看文件不容易發現,演練時可以特別檢查:

備份位置要對應你準備防的故障範圍。 如果主要系統和備份都只留在同一個 region,區域故障時可能一起無法使用。需要跨區復原時,應評估 dual-region、multi-region 或另一區的複本,並實際測試還原。

定期演練 DR 流程。 演練時確認備援區域的 IAM 權限、寫死的 endpoint、replica 提升步驟,以及 runbook 是否仍能照著執行。文件上寫的 RTO 要透過演練量測,才能知道是否真的做得到。

同步複寫會影響寫入路徑。 跨 region 確認通常需要更多網路往返;若應用對寫入延遲敏感,不能只看 RPO 改善,也要量測實際回應時間與吞吐量。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  P[DR 計畫與 Runbook] --> G[排定 Game Day]
  G --> F[模擬 region<br/>或關鍵依賴失效]
  F --> E[執行流量切換、<br/>資料提升與服務擴容]
  E --> M[量測實際 RTO、<br/>RPO 與資料完整性]
  M --> T{達到目標?}
  T -- 否 --> R[修正 IAM、endpoint、IaC<br/>與操作步驟]
  R --> P
  T -- 是 --> U[更新證據與下次演練日期]
沒有演練的 DR 只有文件;定期注入故障、量測真實 RTO/RPO,並把暴露的權限、端點與自動化缺口寫回 runbook。

延伸閱讀


下一步:DR 把「整個 region 不見」也補上了,整套架構的可靠性骨架到這就齊了。最後一篇我們收尾,把安全與成本這兩條貫穿全程的主線一次講透。

系列導航

🎯 換你練習

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

PCA 雲端架構師之旅 — 第 12 篇/共 13 篇 查看系列全覽 →

讀完後,留一個學習紀錄

試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。

文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。

留言討論

文章目錄與系列

徽章解鎖!