Google Cloud Well-Architected Framework 可靠性支柱中的這項原則提供建議,協助您設計及執行測試,以便在發生故障時復原。
這項原則與可靠性的學習 重點領域有關。
原則總覽
為確保系統能從故障中復原,您必須定期執行測試,包括區域容錯移轉、版本復原,以及從備份還原資料。
這項測試可協助您練習如何應對會對可靠性造成重大風險的事件,例如整個區域服務中斷。這項測試也有助於確認系統在服務中斷期間是否正常運作。
如果整個區域停止運作 (這種情況相當少見),您必須將所有流量容錯移轉至其他區域。在工作負載正常運作期間,修改資料時,必須從主要區域同步至容錯移轉區域。您必須確認複製的資料一律為最新資料,以免使用者遇到資料遺失或工作階段中斷的情況。負載平衡系統也必須能隨時將流量轉移至容錯移轉區域,且不會中斷服務。為了在區域性服務中斷後盡可能縮短停機時間,作業工程師也必須能夠手動且有效率地將使用者流量從某個區域移出,並盡可能縮短所需時間。這項作業有時稱為「排空區域」,也就是停止傳入該區域的流量,並將所有流量移至其他位置。
建議
設計及執行故障復原測試時,請參考下列子節的建議。
定義測試目標和範圍
明確定義測試目標。例如,您的目標可能包括:
- 驗證復原時間目標 (RTO) 和復原點目標 (RPO)。詳情請參閱「災難復原規劃基本概念」。
- 評估系統在各種故障情境下的韌性和容錯能力。
- 測試自動容錯移轉機制的成效。
決定測試範圍內的元件、服務或區域。範圍可以包含特定應用程式層 (例如前端、後端和資料庫),也可以包含特定 Google Cloud 資源 (例如 Cloud SQL 執行個體或 GKE 叢集)。範圍也必須指定任何外部依附元件,例如第三方 API 或 Cloud Interconnect。
準備測試環境
選擇合適的環境,最好是複製正式環境設定的測試環境或沙箱環境。如果您在正式環境中進行測試,請務必準備好安全措施,例如自動監控和手動復原程序。
建立備份方案。為重要資料庫和服務建立快照或備份,以免測試期間資料遺失。確保團隊已做好準備,在自動容錯移轉機制失敗時,能手動介入處理。
為避免測試中斷,請確認 Identity and Access Management (IAM) 角色、政策和容錯移轉設定正確無誤。確認測試工具和指令碼具備必要權限。
向利害關係人 (包括營運、開發運作和應用程式擁有者) 告知測試時程、範圍和潛在影響。向利害關係人提供預估時間表和測試期間的預期行為。
模擬故障情形
使用 Chaos Monkey 等工具規劃及執行故障。您可以使用自訂指令碼模擬重要服務故障,例如關閉多可用區 GKE 叢集中的主要節點,或停用 Cloud SQL 執行個體。您也可以使用指令碼,根據測試範圍,透過防火牆規則或 API 限制模擬整個區域的網路中斷。逐步提高故障情境的嚴重程度,觀察系統在各種情況下的行為。
在故障情境中加入負載測試,模擬服務中斷期間的實際使用情形。測試連鎖性故障的影響,例如後端服務無法使用時,前端系統的行為。
如要驗證設定變更,並評估系統對人為錯誤的復原能力,請測試涉及錯誤設定的情境。例如,使用不正確的 DNS 容錯移轉設定或 IAM 權限執行測試。
監控系統行為
監控負載平衡器、健康狀態檢查和其他機制如何重新轉送流量。使用 Cloud Monitoring 和 Cloud Logging 等 Google Cloud 工具,擷取測試期間的指標和事件。
觀察故障模擬期間和之後的延遲時間、錯誤率和處理量變化,並監控整體效能影響。找出使用者體驗中的任何降級或不一致之處。
確保系統會針對重要事件 (例如服務中斷或容錯移轉) 產生記錄檔並觸發快訊。您可以運用這項資料,驗證警告和事件應變系統的成效。
根據 RTO 和 RPO 驗證復原作業
測量系統在故障後恢復正常運作所需的時間,然後將這項資料與定義的 RTO 進行比較,並記錄任何差距。
確保資料完整性和可用性符合 RPO。如要測試資料庫一致性,請比較故障前後的資料庫快照或備份。
評估服務復原情形,確認所有服務都已恢復正常運作,且對使用者的影響降到最低。
記錄並分析結果
記錄每個測試步驟、失敗情境和對應的系統行為。包括時間戳記、記錄和指標,以便進行詳細分析。
並指出測試期間觀察到的瓶頸、單點故障或非預期行為。為排定修正順序,請依嚴重性和影響程度分類問題。
針對系統架構、容錯移轉機制或監控設定提出改善建議。根據測試結果,更新所有相關的容錯移轉政策和教戰手冊。向利害關係人提交事後檢討報告。報告應總結成果、經驗教訓和後續步驟。詳情請參閱「進行徹底的事後檢討」。
疊代執行並改善
為驗證持續的可靠性和韌性,請規劃定期測試 (例如每季)。
在不同情境下執行測試,包括基礎架構變更、軟體更新和流量負載增加。
使用 CI/CD 管道自動執行容錯移轉測試,將可靠性測試整合至開發生命週期。
在事後檢討期間,請根據利害關係人和使用者的意見回饋,改善測試程序和系統韌性。