應用程式的高可用性

本策略指南提供技術指引和最佳做法,說明如何設計高可用性 (HA) 工作負載,並部署至設定多個可用區或多可用區的 Google Distributed Cloud (GDC) 實體隔離方案。本指南說明重要架構模式、服務設定和運作考量,協助您盡量減少停機時間,並為在 GDC 上執行的應用程式提供業務持續性。

高可用性策略適用於參與設計、部署及管理 GDC 應用程式的技術專業人員,包括:

  • 平台管理員群組中的雲端架構師:在 GDC 上設計彈性基礎架構和應用程式架構。

  • 應用程式營運人員群組中的開發運作工程師和網站穩定性工程師 (SRE): 為 HA 工作負載實作部署策略、自動化、監控和事件回應。

  • 應用程式營運商群組中的應用程式開發人員:建構容錯應用程式,並與高可用性基礎架構模式無縫整合。

詳情請參閱 GDC air-gapped 說明文件適用對象

高可用性的重要性

在現代分散式系統中,規劃高可用性至關重要。無論是預先規劃或意外停機,都可能導致業務嚴重中斷、收益損失、信譽受損,以及使用者體驗不佳。對於使用 GDC 在邊緣或私人資料中心執行的工作負載,可用性通常與核心作業成功率直接相關,尤其是延遲時間敏感或任務關鍵型應用程式。從一開始就設計高可用性,是建構彈性且可靠服務的必要條件。

超大規模功能,在當地提供

GDC 可將基礎架構和服務擴展至邊緣和資料中心。 Google Cloud GDC 提供全代管的軟硬體解決方案,可讓您在 GDC 叢集和其他Google Cloud 服務上執行 Google Kubernetes Engine (GKE),更貼近資料產生和使用位置。

本指南著重於在多區域拓撲中設定的 GDC Universe。在多區域中,單一 GDC「宇宙」包含同一位置內多個實體隔離的「區域」,例如資料中心園區或都會區。這些區域的電力、冷卻和網路系統各自獨立,可防範區域性實體基礎架構故障。GDC 宇宙中各區域之間的低延遲、高頻寬網路連線,可實現同步複製和快速容錯移轉,為建構高可用性應用程式奠定基礎。

擴充性和負載平衡

除了基本元件備援之外,有效管理流量及啟用無縫擴充功能,對於維持高可用性至關重要,尤其是在負載條件各異的情況下。GDC 提供多種機制,可進行負載平衡和精密的流量管理。

處理南北向流量的外部負載平衡器

如要向 GKE on GDC 叢集外部的使用者或系統公開應用程式 (南北向流量),請使用 GDC 的受管理外部負載平衡功能。外部負載平衡器 (ELB) 服務提供這些功能,並與 Kubernetes 無縫整合。

ELB 服務提供高可用性和擴充性,主要特性如下:

  • 代管服務:ELB 由 GDC 管理,專為高可用性和復原能力而設計。

  • 外部存取權:從 GDC 管理的集區佈建穩定的外部 IP 位址,為外部用戶端提供一致的進入點。

  • 與 Kubernetes 整合的負載平衡器:建立不含特定內部註解的 Kubernetes Service type: LoadBalancer 時,系統會自動佈建及設定負載平衡器。

  • 可用區感知:將傳入流量分配至 GDC 宇宙中所有可用區內執行的健全應用程式 Pod。ELB 會依據 Pod 的就緒探測結果判斷後端健康狀態。

  • 可擴充性:當應用程式在節點和區域間橫向擴充時,可處理外部流量分配作業。

使用外部負載平衡器是標準做法,也是建議做法,可為外部流量進入提供高可用性,因此系統會自動將用戶端要求從失敗的區域或執行個體轉送出去。

詳情請參閱「設定外部負載平衡器」。

處理東西向流量的內部負載平衡器

如要讓在同一個 GKE on GDC 叢集內執行的服務進行通訊 (東西向流量),GDC 會提供內部負載平衡器 (ILB)。這對於解除內部服務的耦合關係,以及提供高可用性和可擴充的內部通訊路徑至關重要。

ILB 服務提供高可用性和可擴充性,主要特性如下:

  • 內部存取權:提供穩定的內部 IP 位址,只能從 GDC 網路內部存取,例如叢集節點或其他內部服務。

  • 負載平衡器與 Kubernetes 整合:通常是透過建立 Kubernetes Servicetype: LoadBalancer,並加上特定註解來佈建,指出必須是內部負載平衡器。例如:networking.gke.io/load-balancer-type: "Internal"

  • 區域感知:在所有可用區域中,將流量分配給透過就緒探測器識別的健康後端 Pod。如果某個區域發生問題,這種分配方式可避免內部通訊失敗。

  • 服務探索和解除耦合:透過 kube-dns 和 CoreDNS 整合,提供穩定的內部 IP 位址和 DNS 名稱。服務可以互相探索及通訊,因此用戶端不必知道個別 Pod 的 IP 位址。

  • 擴充性:將流量分配到所有可用的健康狀態良好副本,方便擴充內部後端服務。

使用 ILB 進行內部服務對服務通訊,可讓內部流量在區域發生故障時保持穩定,並提供有效的擴縮功能,補足外部 ELB 和基礎運算資源分配提供的 HA。這項功能通常用於分層應用程式,前端必須與 Kubernetes 叢集內的後端 API 或資料庫通訊。

詳情請參閱「設定內部負載平衡器」。

透過非同步儲存空間,在各個區域部署高可用性應用程式

GDC 可讓您在更靠近資料來源或使用者的位置執行基礎架構和應用程式。在 GDC 宇宙中實現高可用性,對重要工作負載至關重要。您可以在 GDC 宇宙中跨多個區域部署高可用性應用程式,並實作非同步儲存空間複製功能,確保資料持續性及災難復原。

可用區代表單一宇宙中的不同故障網域。將應用程式元件分散到各個可用區,並在各區複製資料,可大幅提升韌性,避免因區域性硬體故障或維護事件而中斷服務。

後續步驟

  • 如要部署服務,將其做為分散在各個區域的虛擬機器 (VM) 集合,並使用非同步複製的區塊儲存空間,請參閱「部署高可用性 VM 應用程式」。

  • 如要使用非同步複製的永久磁碟區,在 Kubernetes 的各個區域中將服務部署為容器化應用程式,請參閱「部署高可用性容器應用程式」。