在“流量分流篇”,我们已大概介绍了一下Dubbo是如何分流的。本篇将从应用层面更详细的说明Dubbo是如何分流的。
Dubbo分流,即点对点软路由方式进行分流,支持按“IDC权重“策略,也支持“同IDC优先“的策略。
Dubbo分流的一个重要前提是:通过同步工具,两边环境将对方环境的服务提供者列表同步到自己环境的服务注册发现中心,也就是两个环境服务注册中心都有服务提供者全集,数据同步一致。

1. 权重方案
权重方案,即执行"IDC权重“策略,即双活环境、主环境按权重比例分摊流量。

说明:
1. 权重支持是Dubbo原生版本支持的,也就是此方案,无须升级Pafa5版本。即服务提供者注册时,声明自己的权重,调用方根据权重比例来进行负载均衡。
2. Pafa5框架,在papp.properties或pizza.properties中,增加配置dubbo.service.weight项即可。双活环境dubbo.service.weight=1,默认环境dubbo.service.weight=99。
3. 在Pafa5管控平台中,可以动态变更权重,动态生效。

4. 如果需要关闭某环境流量,将权重设为0即可。
5. 由Dubbo框架执行负载均衡,应用增加权重配置即可。
6. 权重比例算法为,双活环境比例=双活权重/(双活权重+主环境权重),主环境比例=主环境权重/(双活环境权重+主环境权重)
局限性:
1. 应用调用存在跨IDC,且跨IDC的比例又受到调用方双活环境流量比例的影响。
2. 本地优先方案

说明:
1. 需要升级Pafa5版本到5.4.9及以上
2. 配置方式详见相关指南
3. 如果默认环境的提供者全部挂掉,请求因找不到同环境的请供者,会跨IDC进入双活环境。反向同理。
4. 为避免未完成双活的应用调用双活环境,双活环境的weight需要设为0,默认环境的weight设为100。
5. 同IDC优先,本质是环境路由,即当前环境优先,如果当前环境不可用,则跨IDC调用默认环境的提供者。
3. 方案如何选择
应用对进入流量,自主自控自治原则,根据自身实际情况,自主选择分流方式及策略。
在方案选择上,权重方案的优点在于,调用方都没做双活的情况,应用自身可以自主导入部分流量进入双活环境,独立验证双活环境。本地优先方案,则依赖进入调用方的双活流量(渠道端)。
同城双活环境的最终要求是:本地优先,如果上游系统(调用方)大部分已做完双活,过来的流量足以验证双活环境,建议选择本地优先方案。
4. 本地优先方案接入指引
升级Pafa5版本到5.4.9.1及以上,加入 Dubbo环境路由插件包(hubble-env-router),主要支持消费者路由决策链:同IDC>Tag标识>默认环境>权重。
<dependency>
<groupId>******</groupId>
<artifactId>p***5-bootstrap</artifactId>
<version>5.4.9.1</version>
</dependency>
<dependency>
<groupId>*****.hubble</groupId>
<artifactId>hubble-env-router</artifactId>
<version>0.3</version>
</dependency>
复制
双活环境配置:在双活环境的pizza.properties或全局变量中,配置以下属性:
hubble.env.tag.switch=true
dubbo.service.defenv=false
#双活
dubbo.service.envtag=red
#第一个用?,多个参数拼接用&
dubbo.registry.address = zookeeper://{注册中心地址}?router=xenvtag
#兜底权重
dubbo.service.weight=0
复制
主环境配置:在主环境环境的pizza.properties或全局变量中,配置以下属性:
hubble.env.tag.switch=true
dubbo.service.defenv=true
#主环境
dubbo.service.envtag=green
#第一个用?,多个参数拼接用&
dubbo.registry.address = zookeeper://{注册中心地址}?router=xenvtag
#兜底权重
dubbo.service.weight=100
复制