進階負載平衡總覽
進階負載平衡包含多項功能,可讓您微調全域負載平衡和流量分配,盡可能達成可用性、效能和成本效益目標。本文適用於對 Cloud Service Mesh 和負載平衡概念有中等程度瞭解的使用者。
如要實作進階負載平衡,請建立服務負載平衡政策 (serviceLbPolicies
資源),其中包含影響後端選取的相關值。然後將服務負載平衡政策附加至後端服務。服務負載平衡政策會指定用來判斷流量如何平衡分配至後端的演算法。
進階負載平衡可選擇下列演算法:
- 按照區域依序分散 (預設演算法)。
- 分散至區域。
- 分散至全域。
- 按照可用區依序分散。
可用的其他選項如下:
- 指定偏好的後端。Cloud Service Mesh 會先將流量傳送至這些 MIG 或 NEG,再傳送至其他後端。
- 設定自動容量排除機制。
- 自訂容錯移轉行為。
設定任何進階負載平衡選項前,建議您先詳閱後端服務資源的文件。
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 的可用區。除非有特殊需求,否則建議使用預設演算法。
透過 Waterfall by Region,後端會根據容量比例接收流量,藉此保護後端免於超載。如有需要,系統會跨區域界線傳送流量,確保區域內的後端負載平均。即使用戶端所在區域仍有剩餘容量,仍會有跨區域流量。每個用戶端的要求可以分散至區域中的多個區域 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,這是預期行為。如不希望發生這種情況,請變更「偏好的後端」欄位中的值。
流量不會傳送至有許多不健康端點的 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 不會在排空和未排空狀態之間擺盪。
如果後端未使用平衡模式,則容量調整比例的限制也適用於此。
後續步驟
- 如需設定操作說明,請參閱「設定進階負載平衡」。