先把 RTO 與 RPO 寫成可執行的服務目標
RTO 是從事故發生到服務恢復可接受的最長時間;RPO 則是可接受的資料回溯範圍。兩者不能只停留在簡報上的單一數字。工程團隊需要把「服務恢復」定義清楚:是首頁可以開啟、使用者可以登入,還是訂單、付款、庫存與後台作業都能正常執行?如果恢復標準含糊,即使流量已切到備援區,也可能只是把使用者導向一套無法完成交易的系統。
我們通常會依業務能力而非伺服器清單分級。例如,登入與查詢可以先恢復,但寫入交易必須等資料庫確認主要寫入節點;報表可容許較長的 RTO,卻不應阻塞核心流程。RPO 也要落到資料種類:訂單可能接近零資料遺失,操作紀錄可以稍後補送,快取則能直接重建。這樣才能避免所有元件都採用最高成本的同步備援。
- 定義恢復邊界:列出切換後必須可用的 API、批次作業、身分驗證與外部整合。
- 拆分資料等級:區分不可遺失的交易、可重播的事件、可重建的索引與暫存資料。
- 確認計時起點:釐清 RTO 從監控告警、人工判定,還是實際故障發生時開始計算。
- 指定降級模式:決定備援期間是否允許唯讀、延後寫入或暫停非核心功能。
選擇主動、暖備或冷備,不要只看切換速度
Active-active 架構讓多個區域同時服務流量,理論上能縮短切換時間,但它也把衝突處理、全域流量管理、重複訊息及跨區延遲帶進日常營運。若同一筆客戶、庫存或流程狀態可能在兩區同時修改,系統就必須具備明確的資料所有權、版本控制或衝突合併規則。單純把應用程式部署兩份,並不等於具備多區寫入能力。
Active-passive 或暖備通常較容易控制:次要區平時維持資料複寫與最低運算能力,事故時再擴容並提升為主要區。代價是切換步驟較多,也必須驗證基礎設施、映像檔、密鑰及網路規則能在目標時間內就緒。冷備成本最低,但恢復高度依賴自動化品質與備份還原速度。選型時應同時評估平時成本、操作複雜度、資料寫入模型、供應商限制,以及團隊是否能持續演練。
資料一致性決定切換是否真的安全
同步複寫有助於壓低 RPO,但跨區網路延遲會直接進入寫入路徑;任一區域或連線不穩時,也可能降低整體可用性。非同步複寫能隔離延遲,卻代表備援區可能落後。此時切換不是單純修改 DNS,而是要先取得複寫進度、判斷尚未送達的交易,並決定是否暫停寫入。對不能重複執行的付款、庫存扣減與外部指令,還需要冪等鍵、去重機制及可稽核的補償流程。
最危險的情況通常是 split-brain:兩區都認為自己可以接受寫入。設計上應有單一寫入權威,例如租約、仲裁或明確的區域提升程序,並在失去共識時採取安全的唯讀或停止寫入策略。復原後也不能直接把舊主要區重新接回流量;必須先比較資料時間線、修復差異、重新建立複寫,再逐步恢復服務。
- 關聯式交易資料:優先維護單一寫入順序與交易完整性,必要時以可用性換取一致性。
- 事件與訊息:保留可重播紀錄,消費端實作冪等,並監控重複與積壓。
- 搜尋索引與快取:視為衍生資料,準備重建程序,不必追求與主資料相同的複寫策略。
- 檔案與物件:確認跨區複寫延遲、版本管理及刪除傳播行為,避免錯誤刪除同步到備援區。
把故障切換做成可演練、可回復的操作流程
可靠的跨區備援需要一份能實際執行的 runbook,涵蓋事故宣告、凍結部署、確認資料狀態、提升備援資料庫、調整流量、檢查外部依賴,以及對內外溝通。DNS TTL、憑證、密鑰、第三方 IP 白名單、LINE webhook、ERP 或 CRM 連線設定,經常是演練時才暴露的障礙。健康檢查也不能只確認程序存活,而要驗證身分登入、關鍵讀寫與下游整合。
演練應涵蓋整區不可用、資料庫故障、跨區網路中斷、錯誤部署與憑證失效等不同情境。每次測試都要量測實際 RTO 與資料落差,記錄需要人工判斷的步驟,並確認 failback 同樣可行。自動切換適合判斷明確、可快速驗證的故障;涉及資料權威轉移時,受控的人工確認往往更安全。成熟度的標準不是架構圖有兩個區域,而是團隊能反覆證明:在限制條件下,服務與資料都能以預期方式恢復。