題幹與適用場景
設計單一區域 SaaS 在整區故障後的復原。最多遺失 1 小時資料(RPO),4 小時內恢復服務(RTO)。假設尖峰 1,000 QPS 只是面試容量假設;應用程式無狀態,主資料庫為關聯式資料庫,物件儲存放置使用者上傳檔案。復原範圍包含資料、程式碼、設定、密鑰、路由與操作權限。只說「有備份」不足以證明目標可達。
面試官考察點
公開系統設計手冊把 RPO/RTO 災難復原列為面試情境;AWS 將兩者定義為由業務設定的目標,並要求選擇策略、測試復原、管理設定漂移和自動化。強回答應把 RPO 轉成複製延遲或備份頻率,把 RTO 轉成偵測、提升、部署、路由和驗證預算,並區分資料平面與控制平面故障。
回答前需要澄清的問題
- 付款、使用者資料和分析資料是否共享同一 RPO?應按業務影響分層。
- 故障是區域遺失、錯誤部署還是邏輯損壞?複製能應付前者,時間點備份才能回滾後兩者。
- 切換期間是否必須繼續寫入?若必須,先定義寫入權與衝突策略。
- RTO 終點是健康檢查、客戶流量還是完整功能?操作手冊必須寫清里程碑。
- 災備帳戶是否可獨立操作?配額、憑證、映像和 DNS 權限可能決定目標能否達成。
30 秒回答框架
「我先按業務分層並讓 RPO/RTO 可測量,再做跨區域非同步複製、時間點備份與物件版本保護。4 小時目標可先採用 pilot light:用 IaC 保存應用程式堆疊,故障時提升資料、部署、切路由並做完整性和冒煙檢查。季度演練測量每一步,驗證備份復原、設定漂移和實際 RPO/RTO。」
分步深入解答
1. 把目標轉成預算
RPO 不超過 1 小時,複製延遲或備份間隔必須低於上限,並設提前告警;時間點備份用來處理邏輯損壞。RTO 4 小時要拆成偵測與宣告、資料提升、應用程式部署、路由、冒煙和餘量。20 分鐘復原資料庫、30 分鐘部署、10 分鐘切流只是待演練驗證的假設。
2. 選擇拓撲
備份復原成本低但 RTO 較大;pilot light 常駐資料複製和核心資源,應用程式容量在故障時開啟,適合四小時目標;warm standby 常駐縮小版可執行堆疊,成本更高但復原更快;active/active 最快,卻引入跨區域寫入衝突、路由和維運複雜度。把映像、Schema、設定和 IaC 放在災備帳戶,確保可重建。
3. 保護資料
非同步複製關聯式資料庫變更到獨立區域並監控延遲。只有日誌位置和完整性檢查符合 RPO 才提升副本。跨帳戶或跨區域保存不可變時間點備份,處理誤刪、勒索和錯誤寫入。物件儲存啟用版本並校驗數量和校驗和。付款等零遺失領域應另設層級,不能套用一小時目標。
4. 復原服務路徑
從不可變映像和 IaC 部署應用程式,預置健康檢查、密鑰存取、配額和觀測。資料庫連線、遷移、驗證與代表性讀寫冒煙通過後才切流。AWS 提醒資料平面通常比控制平面更能在災難中工作;故障時才建立所有資源會侵蝕 RTO。
5. 讓操作手冊安全執行
寫明誰宣告災難、誰提升資料、誰批准切流。每一步使用冪等命令、停止條件、回滾或切回路徑,並記錄單調遞增的步驟日誌。容量不足時先關閉非關鍵功能,保留復原點和客戶狀態通知。
6. 用演練證明
定期做復原、區域 game day 和設定漂移檢查。分別測量偵測、決策、復原、提升、部署、路由和穩定時間;校驗資料列數、校驗和、權限、佇列和背景工作。注入壞備份、舊密鑰、配額不足和複製延遲,確保每種情況都有告警或停止條件。
高品質示範回答
「RPO 1 小時、RTO 4 小時,我會採用跨區域非同步資料庫和物件複製、不可變時間點備份,以及由 IaC 管理的 pilot-light 區域。操作手冊預留偵測、提升、部署、DNS/全域路由和冒煙檢查時間,並在季度演練中測量。切換時選擇已驗證的復原點,做完整性校驗後提升資料,部署映像,驗證驗證流程和代表性寫入,再切流。若主區發生邏輯損壞,複製副本不能直接用,要回到乾淨時間點。付款資料另設更嚴格層級。」
常見錯誤
- 只說多區域 → 成本與複雜度沒有邊界 → 從 RPO/RTO 推導拓撲。
- 把複製當備份 → 損壞與刪除會同步 → 保留不可變時間點副本並實測復原。
- 忽略程式碼設定 → 有資料卻沒有可服務的堆疊 → 版本化映像、Schema、密鑰、配額和 IaC。
- 把改 DNS 算作復原 → 流量可能到達未驗證系統 → RTO 包含提升、冒煙和穩定。
- 從未演練 → 備份、配額和操作手冊可能過期 → 定期注入故障並測量。
追問及應對
RPO 為零時怎麼辦?
非同步複製不夠,需要同步寫入權或產品層級暫停寫入,再評估延遲、仲裁和跨區域分割行為。
如何處理邏輯損壞?
停止提升受污染副本,選擇乾淨時間點復原到隔離環境,驗證不變量後只重播批准變更。
為什麼不用 warm standby?
若演練證明部署和擴容能在四小時內完成,pilot light 成本較低;無法承受啟動時間時才提高到 warm standby。
如何防止設定漂移?
用版本化 IaC 渲染災備區,比對映像、Schema、密鑰、配額和路由差異,並把檢查放進每次演練。