設計完善可靠的系統

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

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

瞭解故障類型

有時會因為系統或硬體發生故障,而導致一個甚至更多個 VM 執行個體中斷。部分故障狀況包括但不限於:

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

    由於硬體或系統故障而造成單一執行個體意外故障。為了避免發生這種狀況,請使用永久磁碟開機指令碼來儲存資料,並在重新啟動執行個體後重新啟用軟體。

  • 未預期的單一執行個體重新啟動

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

  • 區域或地區性故障

    區域或地區性故障相當少見,這類情況可能會導致您在指定區域或地區中的所有執行個體皆無法存取或失效。

    為了避免發生這種故障狀況,請建立跨地區或區域的多元性,並實作負載平衡,此外也請跨多個區域備份資料複製永久磁碟

設計可靠及完善系統的訣竅

為了減少執行個體故障,您必須在 Compute Engine 服務上設計穩固的應用程式,以防範故障情形,網路中斷和意外災難。完善可靠的系統應具備順利處理故障狀況的能力,包括將故障執行個體的流量重新導向至正常的執行個體,或是在重新啟動時自動執行工作。

以下提供了一些一般提示,可協助您設計出能夠因應故障且完善可靠的系統。

使用即時遷移

Google 會定期對基礎架構執行維護作業,包括使用最新軟體來修補系統、執行日常測試和預防性維護,在大多數情況下可保障基礎架構處在安全、快速且效率良好的狀態。Compute Engine 採用 live migration (即時遷移) 的方式,確保在預設情況下,基礎架構的維護工作對虛擬機器執行個體而言是開放的。

即時遷移是 Google 建立的一項技術,可將執行中的執行個體搬離將要進行維護工作的系統。 Compute Engine 會自動執行此作業。

執行即時遷移作業時,執行個體可能會在短時間內效能下降。也可選擇將虛擬機器執行個體設為終止,並在維護事件結束後重新啟動。若執行個體需要維持穩定一致的最大效能,以及當整體應用程式就是專門用於處理執行個體故障或重新啟動的時候,就相當適合使用此選項。

若要設定虛擬機器執行即時遷移,或是將其設為重新啟動而非遷移,請參閱設定執行個體排程選項一文。

如要進一步瞭解即時遷移,請參閱即時遷移說明文件。

發佈執行個體

只要建立了跨越多個地區和區域的執行個體,當含有其中一個執行個體的區域或地區發生中斷情況時,就可以指向替代的虛擬機器執行個體。若您將所有執行個體託管在同一個區域或地區,當無法連上該區域或地區時,就無法存取任何執行個體。

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

若您使用內部 DNS 名稱或執行個體名稱來定址位於 Compute Engine 內部網路的執行個體,請使用區域 DNS 名稱。內部 DNS 伺服器分佈於所有區域,因此可使用區域 DNS 名稱來執行解析,即使其在其他位置發生故障亦然。執行個體的內部完整網域名稱 (FQDN) 具有以下格式:

  • 使用區域 DNS 的執行個體:[INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal
  • 使用全域 DNS 的執行個體:[INSTANCE_NAME].c.[PROJECT_ID].internal

其中:

  • [INSTANCE_NAME] 是執行個體的名稱。
  • [ZONE] 是執行個體的所在區域。
  • [PROJECT_ID] 是執行個體所屬的專案。

如要查看執行個體使用區域 DNS 名稱還是全域 DNS 名稱,請參閱查看執行個體的 DNS 名稱一文。

如果專案使用全域 DNS 名稱,您可以替您的應用程式準備區域 DNS 名稱和搜尋路徑。詳情請參閱遷移至區域 DNS 名稱一文。

建立執行個體群組

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

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

代管執行個體群組也適用於地區,因此可在單一地區中建立發佈至多個區域的 VM 執行個體群組。詳情請參閱使用地區性代管執行個體群組發佈執行個體一文。

使用負載平衡

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

  • 使用地區性代管執行個體群組,將應用程式部署到多個區域中的執行個體。 接下來可建立轉送規則,將流量散佈到該地區中所有區域裡的全部虛擬機器執行個體上。每條送寄規則皆可使用外部 IP 位址來定義應用程式的進入點。

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

  • 使用自動調度資源功能,可根據負載的增減,自動新增或刪除代管執行個體群組的執行個體。

此外,負載平衡服務還提供 VM 健康狀態檢查功能,可協助偵測和處理執行個體的故障狀況。

詳情請參閱負載平衡總覽負載平衡說明文件

使用啟動與關閉指令碼

Compute Engine 提供啟動及關閉指令碼,分別在執行個體開機或關機時執行。這些指令碼可在初次啟動執行個體或是關閉執行個體時 (無論是否刻意為之),自動處理安裝軟體、執行更新、製作備份、記錄資料等工作。

啟動和關閉指令碼可讓您有效率地啟動或徹底關閉執行個體,是相當重要的一種方式。相較於使用自訂 OS 映像檔來設定執行個體,使用啟動指令碼來設定執行個體是較好的做法。啟動指令碼在執行個體發生錯誤而重開機或重新啟動時執行,也可用於安裝及更新軟體,確保服務是在 VM 當中運行。比起弄清楚自訂映像檔上有哪些檔案或位元組發生變化,將異動部分寫進啟動指令碼來設定執行個體的做法,還比較輕鬆簡單。

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

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

備份資料

請定期將您的資料備份至多個位置。您可以將檔案備份到 Cloud Storage,建立永久磁碟快照,或是將資料複製到其他地區或區域中的永久磁碟。

如要從執行個體複製檔案到 Cloud Storage:

  1. 登入您的執行個體:

    gcloud compute ssh example-instance
    
  2. 如果您從未在此執行個體上使用過 gsutil 工具,請先設定您的憑證。

    gcloud init
    

    另外,如果您已設定執行個體使用 Cloud Storage 範圍內的服務帳戶,則可以跳過這一步及下一步。

  3. 依操作說明進行 Cloud Storage 驗證。

  4. 使用下列指令將您的資料複製到 Cloud Storage:

    gsutil cp <file1> <file2> <file3> ...  gs://<your bucket>
    

您也可以使用 gcloud compute 工具將檔案複製到本機電腦。 如需更多資訊,請參閱將檔案複製至執行個體或從中複製檔案一文。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件