進階負載平衡總覽

進階負載平衡包含多項功能,可讓您微調全域負載平衡和流量分配,以盡量達成可用性、效能和成本效益目標。本文適用於對 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)

用途

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

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

預設的負載平衡演算法「Waterfall by Region」會將流量平均分配到區域中所有 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),無 Proxy gRPC 則為 50。值越大,流量容錯移轉啟動時間就越早。

疑難排解

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

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

整體而言,Cloud Service Mesh 會嘗試分配流量,讓後端在設定的容量下運作。請注意,這項要求不保證一定會通過核准。詳情請參閱後端服務的說明文件

然後,系統會根據您使用的演算法指派流量。舉例來說,使用 WATERFALL_BY_ZONE 演算法時,Cloud Service Mesh 會盡量將流量導向最近的區域。如果您檢查網路指標,會發現 Cloud Service Mesh 在傳送要求時,偏好 RTT 延遲時間最短的後端,以盡量縮短整體 RTT 延遲時間。

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

流量傳送至較遠的 MIG 或 NEG,而非較近的 MIG 或 NEG

如果偏好的後端設定了較遠的 MIG 或 NEG,就會發生這種情況。如不希望發生這種情況,請變更「偏好的後端」欄位中的值。

流量不會傳送至有許多不健康端點的 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。

自動容量排除機制

  • 永不排空的 MIG 數量下限與使用 serviceLbPolicies 設定時的值不同。

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

  • 如果設定 serviceLbPolicies,則永不排空的 MIG 或 NEG 最低百分比為 50%。在這兩種設定下,如果 MIG 或 NEG 中健康狀態良好的執行個體或端點少於 25%,系統就會將 MIG 或 NEG 標示為健康狀態不良。

  • 如要讓 MIG 或 NEG 在排空後取消排空,至少要有 35% 的執行個體或端點處於健康狀態。這是為了確保 MIG 或 NEG 不會在排空和未排空狀態之間擺盪。

  • 如果後端未使用平衡模式,則容量調整比例的限制也適用於此。

後續步驟