優先級別
在負載平衡期間,Envoy 通常只會考慮設定在最高優先級別的主機。對於每個 EDS LocalityLbEndpoints,也可以指定一個可選的優先級。當最高優先級別 (P=0) 的端點處於健康狀態時,所有流量都會導向該優先級別中的端點。隨著最高優先級別的端點變得不健康,流量將開始慢慢轉移到較低的優先級別。
系統可以透過可設定的 過度佈建係數 來過度佈建,目前預設值為 1.4 (本文檔將假設此值)。如果一個優先級別中 80% 的端點是健康的,那麼該級別仍然被認為是完全健康的,因為 80 * 1.4 > 100。因此,直到少於約 71.4% 的 0 級端點是健康的,才會繼續接收所有流量。
優先級別邏輯使用整數健康分數。一個級別的健康分數是 (該級別中健康主機的百分比) * (過度佈建係數),上限為 100%。P=0 端點接收 (0 級的健康分數) 百分比的流量,其餘的流量流向 P=1 (假設 P=1 是 100% 健康的 - 稍後會詳細說明)。例如,當 50% 的 P=0 端點是健康的時,它們將接收 50 * 1.4 = 70% 的流量。每個優先級別接收的整數流量百分比統稱為系統的「優先級負載」。更多範例 (具有 2 個優先級別,P=1 為 100% 健康)
P=0 健康端點 |
到 P=0 的流量 |
到 P=1 的流量 |
---|---|---|
100% |
100% |
0% |
72% |
100% |
0% |
71% |
99% |
1% |
50% |
70% |
30% |
25% |
35% |
65% |
0% |
0% |
100% |
注意
為了使負載分佈演算法和正規化總健康計算正常工作,每個優先級別必須能夠處理 (100% * 過度佈建係數) 的流量:Envoy 假設 100% 健康的 P=1 可以完全接管不健康的 P=0 等。如果 P=0 有 10 個主機,但 P=1 只有 2 個主機,那麼這個假設可能不成立。
健康分數代表一個級別在考慮原始的過度佈建程度以及目前有多少端點不健康之後,目前處理流量的能力。因此,如果所有級別的健康分數總和 < 100,則 Envoy 認為沒有足夠健康的端點可以完全處理流量。這個總和稱為「正規化總健康」。當正規化總健康降至 100 以下時,流量會在將各級別的健康分數正規化到低於 100 的總和後進行分配。例如,{20, 30} 的健康分數 (產生 50 的正規化總健康) 將被正規化,並導致 {40%, 60%} 的優先級負載。
P=0 健康端點 |
P=1 健康端點 |
到 P=0 的流量 |
到 P=1 的流量 |
---|---|---|---|
100% |
100% |
100% |
0% |
72% |
72% |
100% |
0% |
71% |
71% |
99% |
1% |
50% |
50% |
70% |
30% |
25% |
100% |
35% |
65% |
25% |
25% |
50% |
50% |
隨著新增更多優先級,每個級別消耗的負載等於其正規化的有效健康度,除非其上方級別的健康總和達到 100%,在這種情況下,它不會接收任何負載。
P=0 健康端點 |
P=1 健康端點 |
P=2 健康端點 |
到 P=0 的流量 |
到 P=1 的流量 |
到 P=2 的流量 |
---|---|---|---|---|---|
100% |
100% |
100% |
100% |
0% |
0% |
72% |
72% |
100% |
100% |
0% |
0% |
71% |
71% |
100% |
99% |
1% |
0% |
50% |
50% |
100% |
70% |
30% |
0% |
25% |
100% |
100% |
35% |
65% |
0% |
25% |
25% |
100% |
35% |
35% |
30% |
25% |
25% |
20% |
36% |
36% |
28% |
以虛擬演算法總結如下
health(P_X) = min(100, 1.4 * 100 * healthy_P_X_backends / total_P_X_backends)
normalized_total_health = min(100, Σ(health(P_0)...health(P_X)))
priority_load(P_0) = health(P_0) * 100 / normalized_total_health
priority_load(P_X) = min(100 - Σ(priority_load(P_0)..priority_load(P_X-1)),
health(P_X) * 100 / normalized_total_health)
注意:本節討論了健康的優先級,但這也適用於 降級的優先級。