進階負載平衡總覽

進階負載平衡功能可讓您微調全域負載平衡和流量分配,以便盡可能達成可用性、效能和成本效益的目標。這份文件適用於至少對 Cloud Service Mesh 和負載平衡概念有中級以上理解的使用者。

如要實作進階負載平衡,您必須建立服務負載平衡政策 (serviceLbPolicies 資源),其中包含影響後端選取的值。接著,您可以將服務負載平衡政策附加至後端服務。服務負載平衡政策會指定用於決定流量如何平衡至後端的演算法。

您可以選擇下列演算法選項,以便進行進階負載平衡:

  • 按照區域依序分散 (預設演算法)。
  • 分散至區域。
  • 分散至全域。
  • 按照可用區依序分散。

可用的其他選項如下:

  • 指定偏好的後端。Cloud Service Mesh 會先將流量傳送至這些 MIG 或 NEG,再將流量傳送至其他後端。
  • 設定自動容量排除機制。
  • 自訂容錯移轉行為。

建議您在設定任何進階負載平衡選項前,先詳閱後端服務資源的說明文件。

Cloud Service Mesh 如何轉送及平衡流量

下圖顯示 Cloud Service Mesh 如何決定流量路由。

Cloud Service Mesh 如何做出負載平衡決策
Cloud Service Mesh 如何做出負載平衡決策 (按一下可放大)

首先,Cloud Service Mesh 會根據要求特性和 Route 資源或網址對應中的轉送規則,選擇後端服務 (取決於部署作業使用的 API)。

其次,Cloud Service Mesh 會根據用戶端位置、MIG 或 NEG 的位置、健康狀態和容量,以及與後端服務相關聯的服務負載平衡政策中的資訊,選擇與後端服務相關聯的後端 MIG 或 NEG。

最後,Cloud Service Mesh 會在 MIG 或 NEG 中選擇執行個體或端點。這個選擇取決於後端服務中局部位置負載平衡政策中的資訊。

支援及不支援的後端

下列後端類型支援進階負載平衡功能:

  • 非代管執行個體群組
  • 代管執行個體群組 (MIG)
  • 區域性網路端點群組 (GCE_VM_IP_PORT NEG)
  • 混合式連線網路端點群組 (NON_GCP_PRIVATE_IP_PORT NEG)

下列後端類型不支援進階負載平衡:

  • 地區代管執行個體群組
  • 網際網路端點群組 (INTERNET_FQDN_PORT NEG)

用途

以下各節將說明各個演算法的運作方式,以及如何根據特定業務需求選擇適合的演算法。

將流量平均分配至某個區域中的所有後端

預設負載平衡演算法 (按區域分層) 會將流量平均分配至區域中所有 MIG 或 NEG。除非有特殊需求,否則建議您使用預設演算法。

透過區域分層,後端會根據自身容量接收流量,提供後端超載保護機制。如有需要,系統會跨區域邊界傳送流量,以便在區域內均勻負載後端。即使用戶端所在區域仍有剩餘容量,仍會有跨區域流量。每個用戶端的要求可分散至區域中的多個區域 MIG 或 NEG,這有助於在用戶端的流量負載不均勻時,讓 MIG 或 NEG 的負載保持一致。

將用戶端的流量分散至多個可用區,藉此提高復原能力

預設的區域逐層算法會嘗試在多個區域性 MIG 或 NEG 之間平衡容量使用量。不過,在該演算法下,來自單一用戶端的要求並不會一律傳送至所有區域,且來自單一用戶端的要求通常會轉送至單一區域中的 MIG 或 NEG。

如要讓用戶端將要求分散至某個區域中的所有 MIG 或 NEG,請使用「噴灑至區域」演算法,這樣一來,當流量量快速且局部增加時,就不會導致單一區域中的 MIG 或 NEG 超載。

使用「噴灑至區域」演算法時,如果您有兩個區域 A 和 B,且區域 B 的流量出現尖峰,則系統會將流量分配到兩個區域。在預設演算法中,區域 B 的尖峰可能會在 Cloud Service Mesh 回應變更前,觸發區域超載。

請注意,使用「噴灑至區域」演算法時,每個用戶端的流量一律會分散至區域中的後端區域。因此,即使本區域仍有剩餘容量,跨區域流量也會持續增加,如果有兩個 Cloud Service Mesh 用戶端將流量傳送至相同區域,則會導致 Cloud Service Mesh 流量的受影響區域更廣。

將用戶端的流量分散至多個區域中的所有後端

如先前各節所述,噴灑至區域的演算法會將每個用戶端的流量分散至區域中的所有可用區。如果服務在多個地區設有 MIG 或 NEG,Cloud Service Mesh 仍會將流量傳送至最近的地區,以便最佳化整體延遲時間。

如果您偏好較大的散布半徑,請使用噴灑至世界演算法。有了這個演算法,用戶端就能將要求分散至全球多個區域中所有 MIG 或 NEG。

請注意,使用這個演算法時,所有流量都會分散到全球所有後端。有瑕疵的查詢可能會損壞部署作業中的所有後端。這項演算法也會產生更多跨區域流量,可能會增加要求延遲時間並產生額外費用。

盡可能減少跨可用區流量

您可以使用區域逐層設定,改善整體延遲情形並減少跨區流量。在區域中設定多個 MIG 或 NEG 時,系統會將用戶端流量轉送至該區域中容量最接近的 MIG 或 NEG,直到用盡該區域的 MIG 或 NEG 容量為止,然後再將流量傳送至該區域中的下一個 MIG 或 NEG。只有在這種情況下,流量才會分流至下一個最接近的區域。

有了這項演算法,您就能盡量減少不必要的跨區流量。系統會優先使用最近的本機後端,因此整體延遲時間可能會略為縮短。不過,這也可能導致區域內的 MIG 或 NEG 流量不均。

負載平衡演算法比較

下表詳細比較四種 Cloud Service Mesh 負載平衡演算法。

行為 按照區域劃分的瀑布圖 分散至區域 分散至全域 按照可用區依序分散
在穩定狀態下,區域內的容量使用量均一
在穩定狀態下,多個區域的運算能力使用量一致
在穩定狀態下,在區域內均勻分配流量
跨區流量 可以,這個演算法會將流量平均分配至區域內的各個區域,同時改善網路延遲時間。如有需要,可跨區傳送流量。 是的,流量會填滿容量最接近的區域。然後會進入下一個區域。
對當地區域流量激增的敏感度 平均值;取決於已轉移的流量,以平衡各區域的流量。 較低;因為單一可用區的尖峰會分散到該區域的所有可用區。 較低,因為單一區域的尖峰會分散到所有區域。 較高;因為單一區域的尖峰流量較有可能由單一區域完全負荷,直到 Cloud Service Mesh 能夠做出反應為止。

其他進階負載平衡選項

以下各節將說明如何修改 Cloud Service Mesh 負載平衡選項。

首選後端

您可以設定負載平衡,將後端服務的一組後端指定為偏好後端。這些後端會在後續要求轉送至其他後端之前,完全用盡。Cloud Service Mesh 會優先將用戶端流量分配至偏好的後端,盡可能減少用戶端的請求延遲時間。

任何超過偏好後端所設定容量的流量都會轉送至非偏好後端。負載平衡演算法會在非偏好後端之間分配流量。

其中一個用途是溢流至 Google Cloud,您可以指定在地端運算資源 (以混合式連線 NEG 表示),在要求轉送至自動調整的 Google Cloud 後端 MIG 或 NEG 之前,充分利用這些資源。這項設定可盡量減少 Google Cloud 運算用量,並在必要時逐步溢出或備援至Google Cloud 。

自動容量排除機制

當後端處於不健康狀態時,通常會盡快將其排除在負載平衡決策之外。排除後端可避免要求傳送至不健康的後端。此外,流量會在運作正常的後端之間平衡,以免後端超載,並改善整體延遲時間。

這個選項與將 capacityscalar 設為零的做法類似。當後端的個別執行個體或端點通過健康狀態檢查的比例低於 25%,它會要求 Cloud Service Mesh 自動將後端容量縮減至零。使用這個選項時,系統會從全域負載平衡中移除不健康的後端。

當自動排空的後端再次恢復正常時,如果至少有 35% 的端點或執行個體在 60 秒內恢復正常,則會恢復正常。無論後端健康狀態為何,Cloud Service Mesh 不會耗用後端服務中超過 50% 的端點。

其中一個用途是,您可以使用自動容量耗盡功能搭配偏好的後端。如果偏好的後端 MIG 或 NEG 中的許多端點都處於健康狀態不良,這項設定會將流量從 MIG 或 NEG 移開,以保護 MIG 或 NEG 中的其他端點。

自訂備援行為

Cloud Service Mesh 通常會考量多項因素,再將流量傳送至後端。在穩定狀態下,Cloud Service Mesh 會將流量傳送至根據先前討論的演算法所選取的後端。系統會將所選後端視為延遲和容量利用率的最佳選擇。這些後端稱為主要後端。

當主要後端處於不良狀態且無法接收流量時,Cloud Service Mesh 也會追蹤要使用的後端。這些後端稱為容錯移轉後端。通常是附近的後端,還有一些可用容量。

當後端處於不健康狀態時,Cloud Service Mesh 會盡量避免將流量傳送至該後端,並將流量轉移至健康的後端。

serviceLbPolicy 資源包含一個欄位 failoverHealthThreshold,其值可自訂來控制備援行為。您設定的門檻值會決定何時將流量從主要後端移轉至容錯移轉後端。

當主要後端中的部分端點發生異常時,Cloud Service Mesh 不一定會立即轉移流量。相反地,Cloud Service Mesh 可能會將流量轉移至主要後端中的健康端點,以便穩定流量。

如果後端中有太多端點處於不健康狀態,則剩餘的端點無法處理額外流量。在這種情況下,系統會使用失敗門檻決定是否觸發容錯移轉。Cloud Service Mesh 會容許不健康的情況,直到達到門檻為止,然後將部分流量從主要後端移轉至容錯移轉後端。

容錯移轉健康狀態門檻為百分比值。您設定的值會決定 Cloud Service Mesh 何時將流量導向備援後端。您可以將值設為介於 1 到 99 之間的整數。Cloud Service Mesh 的預設值為 70 (Envoy) 和 50 (無 Proxy gRPC)。較大的值會比較小的值更快啟動流量容錯。

疑難排解

流量分配模式可能會因您如何設定新的 serviceLbPolicy 與後端服務而有所不同。

如要偵錯流量問題,請使用現有的監控系統,檢查流量如何流向後端。其他 Cloud Service Mesh 和網路指標可協助您瞭解負載平衡決策的運作方式。本節提供一般疑難排解和緩解建議。

總體而言,Cloud Service Mesh 會嘗試指派流量,讓後端在其設定的容量下運作。請注意,這並非保證。如需更多詳細資訊,請參閱後端服務的說明文件

系統會根據您使用的演算法分配流量。舉例來說,使用 WATERFALL_BY_ZONE 演算法時,Cloud Service Mesh 會嘗試將流量保留在最近的可用區。查看網路指標後,您會發現 Cloud Service Mesh 會在傳送要求時,偏好使用 RTT 延遲時間最短的後端,以便最佳化整體 RTT 延遲時間。

下列各節說明服務負載平衡政策和偏好後端設定可能會發生的問題。

流量會先傳送到較遠的 MIG 或 NEG,再傳送到較近的 MIG 或 NEG

當偏好後端設定為使用較遠的 MIG 或 NEG 時,這就是預期的行為。如果您不希望發生這種行為,請變更「preferred_backends」欄位的值。

流量未傳送至有許多不健康端點的 MIG 或 NEG

這是在設定 autoCapacityDrain 後,MIG 或 NEG 耗盡時的預期行為。有了這個設定,系統就會從負載平衡決策中移除含有大量不健康端點的 MIG 或 NEG,以免使用這些資源。如果您不希望發生這種行為,可以停用 autoCapacityDrain 設定。但請注意,這表示流量可能會傳送至有許多不健康端點的 MIG 或 NEG,因此要求可能會失敗並顯示錯誤。

在偏好使用某些 MIG 或 NEG 時,流量未傳送至部分 MIG 或 NEG

如果設定為優先的 MIG 或 NEG 尚未達到容量,就會發生這種預期行為。

當已設定偏好後端,且未達容量上限時,系統就不會將流量傳送至其他 MIG 或 NEG。系統會根據這些後端的 RTT 延遲時間,優先指派偏好的 MIG 或 NEG。

如果您希望將流量傳送至其他位置,可以為後端服務設定不使用偏好後端,或是為偏好 MIG 或 NEG 設定較保守的容量預估值。

從單一來源傳送至太多個不同的 MIG 或 NEG

這是使用噴灑至區域或噴灑至世界時的預期行為。不過,您可能會遇到流量分布範圍擴大的問題。舉例來說,後端會看到來自更多用戶端的流量,因此快取命中率可能會降低。在這種情況下,建議您使用其他演算法,例如按區域劃分的瀑布流程。

後端健康情況變更時,流量會傳送至遠端叢集

failoverHealthThreshold 設為高值時,這就是預期的行為。如果您希望在發生暫時性健康狀態變更時,流量能留在主要後端,請將 failoverHealthThreshold 設為較低的值。

部分端點處於不良健康狀態時,健康端點會超載

failoverHealthThreshold 設為低值時,這就是預期的行為。如果部分端點處於不健康狀態,這些不健康端點的流量可能會分散到同一個 MIG 或 NEG 中剩餘的端點。如果您希望提早觸發備援行為,請將 failoverHealthThreshold 設為較高的值。

限制和注意事項

以下是設定進階負載平衡時應注意的限制和考量事項。

按區域依序分散

  • 在透明維護事件期間,流量可能會暫時在本機區域以外進行負載平衡。

  • 預期某些 MIG 或 NEG 會達到容量上限,而同一個區域的其他 MIG 或 NEG 則未充分利用。

  • 如果服務的流量來源與其端點位於同一個區域,您會看到跨區域流量減少。

  • 區域可能會對應至 Google 資料中心內不同內部實體硬體叢集,例如區域虛擬化。在這種情況下,同一個可用區中的 VM 可能無法平均載入。整體來說,系統會改善整體延遲時間。

分散至區域

  • 如果某個 MIG 或 NEG 中的端點發生故障,通常會影響到更多數量的用戶端,換句話說,可能會影響到更多數量的網格用戶端,但影響程度較輕微。

  • 由於用戶端會將要求傳送至區域中的所有 MIG 或 NEG,因此在某些情況下,這可能會增加跨區流量。

  • 開啟的端點連線數量可能會增加,導致資源用量增加。

首選後端

  • 設為偏好後端的 MIG 或 NEG 可能離用戶端很遠,可能會導致用戶端的平均延遲時間變長。即使有其他 MIG 或 NEG 可為用戶端提供更低的延遲時間,也可能發生這種情況。

  • 全域負載平衡演算法 (按地區分層、分散至地區、按區域分層) 不適用於設為偏好後端的 MIG 或 NEG。

自動容量排除機制

  • 使用 serviceLbPolicies 設定時,未排空的 MIG 最小數量與設定的值不同。

  • 根據預設,永不耗盡的 MIG 數量下限為 1。

  • 如果已設定 serviceLbPolicies,則 MIG 或 NEG 的最低未耗盡百分比為 50%。在兩種設定下,如果 MIG 或 NEG 中的執行個體或端點健康狀態低於 25%,就會標示為不健康。

  • 如要讓 MIG 或 NEG 在排空後進行排空,至少要有 35% 的執行個體或端點是健康的。這項設定可確保 MIG 或 NEG 不會在排水和未排水狀態之間搖擺。

  • 對於不使用平衡模式的後端,容量縮放器的限制也適用於這裡。

後續步驟