設計完善可靠的系統

本文件旨在說明在 Compute Engine 上設計可靠系統的最佳做法。文內會提供一般建議,並介紹 Compute Engine 的部分功能,均有助於減少執行個體停機時間,並對虛擬機器 (VM) 執行個體遭遇非預期故障的狀況預作準備。

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

瞭解故障類型

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

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

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

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

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

  • 區域或地區性故障

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

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

可靠的完善系統的設計提示

為了避免執行個體發生故障,設計 Google Compute Engine 服務上的應用程式時,請採取足以防範故障、網路中斷和非預期災難等各種問題的設計。完善可靠的系統應具備順利處理故障狀況的能力,包括將故障執行個體的流量重新導向至正常的執行個體,或是在重新啟動時自動執行工作。

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

使用即時遷移

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

即時遷移是 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 執行個體的數量,以便處理尖峰流量;自動修復功能則可在必要時執行健康狀態檢查,並自動重新建立健康狀態不良的執行個體。

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

使用負載平衡

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

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

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

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

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

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

使用啟動與關閉指令碼

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

啟動和關閉指令碼可讓您有效率地啟動或徹底關閉執行個體,是相當重要的一種方式。無需使用自訂 OS 映像檔來設定執行個體,使用啟動指令碼來設定執行個體是較好的做法。無論執行個體是否是因為故障而導致重新啟動,啟動指令碼皆會運作,並可用來安裝軟體和更新,且可保障在 VM 中執行服務。比起嘗試搞清楚自訂映像檔上有哪些檔案或位元組針發生變更,在啟動指令碼中編寫變更程式碼來設定執行個體的做法,還比較輕鬆簡單。

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

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

備份資料

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

將檔案從執行個體複製至 Google Cloud Storage:

  1. 登入您的執行個體:

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

    gcloud init
    

    如果您已透過 Google Cloud Storage 範圍設定好執行個體以便使用服務帳戶,則可安心略過此步驟,繼續進行下一步。

  3. 按照操作說明驗證 Google Cloud Storage。

  4. 使用下列指令,將資料複製至 Google Cloud Storage:

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

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

後續步驟

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

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

這個網頁
Compute Engine 說明文件