源码学习dubbo3.x的运行期流量调度
前言
- 从可知Dubbo提供了六大核心能力,运行期流量调度就是其中一种。
- 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
- 下面我们通过源码调式探索,运行期流量调度是怎样实现的?
Dubbo如何触发路由规则
- 通过前面描述可知,运行期流量调度时通过配置路由规则实现的
- 具体如何配置路由规则,参照官网说明 2.1 路由规则包括入站流量的规则(VirtualService)和目标地址规则(DestinationRule)
- 通过《dubbo3.x消费端源码浅析以及Triple协议的实现》文章中了解到Dubbo远程调用主要步骤如下 // AbstractClusterInvoker#invoke public Result invoke(final Invocation invocation) throws RpcException { // 根据调用信息获取Invoker列表(通过流量规则进行路由选择) List<Invoker<T>> invokers = list(invocation); // 在Invoker列表中进行负载 LoadBalance loadbalance = initLoadBalance(invokers, invocation); return doInvoke(invocation, invokers, loadbalance); }
路由规则过滤
- 路由规则过滤调用栈入口如下
灰度发布
- 什么是灰度发布? 1.1 :灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度
- Dubbo对灰度的支持 2.1 实现灰度发布,在请求到达服务提供前,能将请求按预设的规则去访问目标服务提供者 2.2 通过上面可知,invocaruib会先经过一个路由器链并返回一组合适的目标服务器地址列表,然后在这些服务器地址中做负载均衡
束语
- 本篇文章主要分析Dubbo3.x的路由规则,了解其内部是如何路由选择的。
- 了解灰度发布的概念,知道Dubbo3.x是如何支持灰度发布的
- 突然发现标题写的是运行期流量调度,那怎样运行时修改调度规则呢? 3.1 在跟代码时发现,在启动时会初始化MeshAppRuleListener 3.2 MeshAppRuleListener的process处理数据变更
上一篇:
Java架构师技术进阶路线图
下一篇:
在浏览器输入URL回车后发生了什么