区域感知路由

我们使用以下的术语:

  • 发起/上游集群:Envoy 将请求从发起集群路由到上游集群。

  • 本地区域:同一区域包含发起集群和上游集群中的主机子集。

  • 区域感知路由:将请求尽最大努力路由到本地区域的上游集群主机。

在部署中,如果发起集群和上游集群中的主机属于不同的区域,Envoy 会执行区域感知路由。在执行区域感知路由之前,有几个先决条件:

区域感知路由的目的是将尽可能多的流量发送到上游集群的本地区域,同时在所有上游主机上大致保持每秒相同的请求数量(取决于负载均衡策略)。

只要上游集群中每台主机的请求数量保持大致相同,Envoy 就会尽量将流量推送到本地上游区域。Envoy 是路由到本地区域还是执行跨区域路由,取决于发起集群和上游集群中健康主机在本地区域的百分比。关于发起集群和上游集群在本地区域的百分比关系,有两种情况:

  • 发起集群本地区域百分比大于上游集群的百分比。在这种情况下,我们不能将所有请求从发起集群的本地区域路由到上游集群的本地区域,因为这将导致所有上游主机的请求不平衡。相反,Envoy 会计算出可以直接路由到上游集群本地区域的请求的百分比。其余的请求则跨区域路由。具体的区域是根据区域的剩余容量来选择的(该区域会获得一些本地区域的流量,并且 Envoy 可能有额外的容量可以用于跨区域的流量)。

  • 发起集群本地区域百分比小于上游集群的百分比。在这种情况下,上游集群的本地区域可以从发起集群的本地区域获得所有的请求,同时(如果需要)也有一定的空间允许获得发起集群中其他区域的流量。

需要注意的是,当使用多个优先级时,目前只支持 P=0 的区域感知路由。