区域加权负载均衡

一种确定如何跨不同区域和地理位置加权分配的方法是通过使用 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. 在优先级级别 (1) 中选择区域(如本节所述)。

  3. 在区域 (2) 中使用集群指定的负载均衡器选择端点。

通过在集群配置中设置 locality_weighted_lb_config 以及通过 load_balancing_weight 提供权重并通过 localityLocalityLbEndpoints 中标识上游主机的位置来配置区域加权负载均衡。

此功能与 负载均衡器子集 不兼容,因为它不方便将区域级加权与子集的合理权重进行协调。