設計韌性系統


本文件旨在說明在 Compute Engine 上設計抗災系統的最佳做法。提供常用建議,提及 Compute Engine 的部分功能,有助於減少執行個體停機時間,並為 Compute Engine 執行個體發生意外錯誤的狀況做好準備。

彈性系統能夠承受一定程度的故障或中斷情況,而不會干擾服務或影響使用者使用服務的體驗。Compute Engine 會盡力避免發生此類中斷情況,但某些事件無法預測,因此最好預先針對此類事件做好準備。

故障類型

在某個時間點,一或多個運算執行個體可能會因系統或硬體故障而遺失。以下列出一些可減輕的失敗情境:

  • 未預期的單一執行個體故障

    由於硬體或系統故障而造成單一執行個體意外故障。您可以使用永久磁碟開機指令碼來儲存資料,並在重新啟動虛擬機器後重新啟用軟體,藉此避免發生這些事件。

  • 未預期的單一 VM 重新啟動

    有時會碰到單一 VM 意外故障並重新啟動的狀況。與意外的單一 VM 故障不同,Compute Engine 會在 VM 故障後自動重新啟動。為了避免發生這種狀況,請備份資料、使用Hyperdisk永久磁碟,並使用開機指令碼來快速重新設定軟體。

  • 區域或地區性故障

    區域失敗相當少見,這類情況可能會導致您在指定區域中的所有執行個體皆無法存取或失效。為了避免發生這種故障狀況,請建立跨地區或區域的多元性,並實作負載平衡,此外也請跨多個區域備份資料複製磁碟

設計具備韌性的系統的訣竅

為了減少執行個體故障,請設計能防範故障、網路中斷和意外災難的應用程式。彈性系統會妥善處理失敗狀況,例如將流量從無法存取的執行個體重新導向至正常執行個體,或是在重新啟動時自動執行工作。

以下提供一些一般提示,協助您設計可抵禦失敗情況的彈性系統。

使用即時遷移

Google Cloud 會定期執行基礎架構維護作業,包括使用最新軟體修補系統、執行例行測試和預防性維護,並確保基礎架構盡可能安全、快速且有效率。Compute Engine 採用即時遷移功能,確保在預設情況下,基礎架構的維護工作對運算執行個體而言是開放的。

即時遷移是一項技術,可將執行中的執行個體搬離將要進行維護工作的系統。Compute Engine 會自動為支援的執行個體類型執行這項作業。

執行即時遷移作業時,執行個體可能會在短時間內效能下降。如果執行個體需要持續提供最高效能,您可以將執行個體設為在其他主機上重新啟動,而非進行即時遷移。如果您選擇這個選項,Compute Engine 會停止執行個體,並在未涉及維護事件的主機上重新啟動執行個體。終止及重新啟動執行個體,適合用於處理執行個體故障或重新啟動情形的整體應用程式。

如要設定執行個體執行即時遷移,或是將其設為重新啟動而非遷移,請參閱「為運算執行個體設定主機維護政策」。

發佈執行個體

請跨多個地區和區域建立執行個體,這樣一來,如果包含其中一個執行個體的區域或區域發生中斷,您就能指向其他運算執行個體。如果您在同一個區域或地區中建立所有執行個體,如果該區域或地區無法連線,您就無法存取任何執行個體。

使用區域特定的內部 DNS 名稱

將專案或機構的預設內部 DNS 類型設為區域性 DNS。在應用程式中,請使用區域 DNS 名稱存取其他運算執行個體。內部 DNS 伺服器分佈於所有區域,因此可使用區域 DNS 名稱來執行解析,即使其在其他位置發生故障亦然。

由於單點故障,全球 DNS 的彈性較低。區域 DNS 可降低跨區域服務中斷的風險。區域 DNS 不需要在專案的所有區域中使用唯一的執行個體名稱,因此可加快執行個體建立作業。

如要查看執行個體使用區域 DNS 名稱還是全域 DNS 名稱,請參閱「判斷 VM 的內部 DNS 名稱」。

如果專案使用全域 DNS 名稱,您可以改用區域 DNS 名稱。詳情請參閱「使用區域 DNS 做為內部 DNS 類型」。

建立 VM 群組

使用代管執行個體群組建立同性質的 VM 群組,當單一 VM 發生不良情形時,負載平衡器可將流量導向多個 VM。

代管執行個體群組 (MIG) 也可提供自動調度資源自動修復等功能。自動調度資源功能可根據特定信號,上下調整 VM 的數量,以便處理尖峰流量。自動修復功能會執行健康狀態檢查,並在必要時自動重新建立健康狀態不良的 VM。

MIG 也適用於地區,因此您可以在單一地區中建立分散至多個區域的 VM 群組。詳情請參閱「建立及管理區域 MIG」。

使用負載平衡

Google Cloud 提供負載平衡服務,有助於支援流量龐大的時期,而不會導致執行個體超載。Cloud Load Balancing 可讓您執行下列操作:

  • 使用區域性 MIG,將應用程式部署到多個區域中的 VM。接下來可建立轉送規則,將流量散佈到該地區中所有區域裡的全部 VM 上。每條轉送規則皆可使用外部 IP 位址來定義應用程式的進入點。

  • 使用全域負載平衡跨多個地區部署 VM。HTTP(S) 負載平衡可讓流量進入 Google Cloud 系統中最接近用戶端的位置。跨地區負載平衡可提供備援功能,在無法連上地區時,系統會自動將流量導向至其他地區。如此一來,您仍可使用相同的外部 IP 位址連上服務。

  • 使用自動調度資源功能,可根據負載的增減,自動新增或刪除 MIG 中的 VM。

此外,Cloud Load Balancing 還提供 VM 健康狀態檢查功能,可協助偵測及處理 VM 故障狀況。

使用啟動與關閉指令碼

Compute Engine 提供啟動及關閉指令碼,分別在執行個體開機或關機時執行。開機和關機指令碼可自動執行安裝軟體、執行更新、製作備份和記錄資料等工作。

啟動和關閉指令碼可讓您有效率地啟動或徹底關閉執行個體,是相當重要的一種方式。相較於使用自訂映像檔來設定執行個體,使用啟動指令碼來設定執行個體是較好的做法。

啟動指令碼在執行個體發生錯誤而重開機或重新啟動時執行,也可用於安裝及更新軟體。您也可以使用開機指令碼,確保服務在執行個體中執行。比起弄清楚自訂映像檔上有哪些檔案或位元組發生變化,將異動部分寫進啟動指令碼來設定執行個體的做法,還比較輕鬆簡單。

關閉指令碼會在執行個體關閉時執行,無論是否刻意為之。可執行備份資料、儲存記錄等最後時刻的工作,並可在停止執行個體前順利終止連線。

詳情請參閱執行啟動指令碼執行關閉指令碼等文。

備份資料

請定期將您的資料備份至多個位置。您可以將檔案上傳至 Cloud Storage建立磁碟快照,或是使用同步複製功能將資料複製到其他區域的磁碟,或是使用非同步複製功能將資料複製到其他區域。