区域加权负载均衡
一种确定如何跨不同区域和地理位置加权分配的方法是通过使用 EDS 中的显式权重,如 LocalityLbEndpoints 消息中所提供的。这种方法与 区域感知路由 互斥,因为在区域感知 LB 的情况下,我们依赖管理服务器来提供区域加权,而不是区域感知路由中使用的 Envoy 端启发式方法。
当所有端点都可用时,使用加权轮询调度程序选择区域,其中区域权重用于加权。当区域中的一些端点不可用时,我们调整区域权重以反映这种情况。与 优先级级别 一样,我们假设一个 超配系数 (默认值为 1.4),这意味着当区域中只有少量端点不可用时,我们不会执行任何权重调整。
假设一个简单的设置,有两个区域 X 和 Y,其中 X 的区域权重为 1,Y 的区域权重为 2,L=Y 100% 可用,默认超配系数为 1.4。
L=X 健康端点 |
到 L=X 的流量百分比 |
到 L=Y 的流量百分比 |
---|---|---|
100% |
33% |
67% |
70% |
33% |
67% |
69% |
32% |
68% |
50% |
26% |
74% |
25% |
15% |
85% |
0% |
0% |
100% |
为了总结,以下是伪算法:
availability(L_X) = 140 * available_X_upstreams / total_X_upstreams
effective_weight(L_X) = locality_weight_X * min(100, availability(L_X))
load to L_X = effective_weight(L_X) / Σ_c(effective_weight(L_c))
请注意,区域加权选择是在选择优先级级别之后进行的。负载均衡器遵循以下步骤:
选择 优先级级别.
在优先级级别 (1) 中选择区域(如本节所述)。
在区域 (2) 中使用集群指定的负载均衡器选择端点。
通过在集群配置中设置 locality_weighted_lb_config 以及通过 load_balancing_weight 提供权重并通过 locality 在 LocalityLbEndpoints 中标识上游主机的位置来配置区域加权负载均衡。
此功能与 负载均衡器子集 不兼容,因为它不方便将区域级加权与子集的合理权重进行协调。