3.Router

简介: casvavava

前言
估算了一下,dubbo里面涉及的东西还是比较多的.比如谈到框架的时候,设计模式都是一个老生常谈的话题,再比如我们开发中我们不常用的一些概念,spi、javassist,以及和zookeeper相关的一些知识,比如ZKClient的使用,这些和dubbo关系很密切,但是这些假如我不做一些前戏铺垫就直接把源码贴出来,那真的没啥意义.因为看源码还是要有一些基础,所以我的目标是,即使看不懂源码,但是看我的分析思路和穿插的一些面试题,都能有一些收获.
从标题就知道,这次我讲的是集群容错中的第二个关键词Router,中文意思就是路由,这个路由是个很有意思的词汇.因为前端的路由和后端的路由他们是不同的,但是思想是基本一致的.鉴于很多技术文章都有一个诟病,就是只讲概念,却不讲应用场景,其实Router在应用隔离,读写分离,灰度发布中都有它的影子.因此本篇用灰度发布的例子来做前期的铺垫

灰度发布

先看看百度百科的概念
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

说人话就是,你发布应用的时候,不停止对外的服务,也就是让用户感觉不到你在发布.那么下面演示一下灰度发布。

1.首先在192.168.56.2和192.168.56.3两台机器上启动Provider,然后启动Consumer,如下图

image.svg

图片加载失败



2.假设我们要升级192.168.56.2服务器上的服务,接着我们去dubbo的控制台配置路由,切断192.168.56.2的流量,配置完成并且启动之后,就看到此时只调用192.168.56.3的服务

image.svg

图片加载失败



image.svg

图片加载失败



image.svg

图片加载失败



image.svg

图片加载失败



3.假设此时你在192.168.56.2服务器升级服务,升级完成后再次将启动服务.

4.由于服务已经升级完成,那么我们此时我们要把刚才的禁用路由取消点,于是点了禁用,但是此时dubbo的这个管理平台就出现了bug,如下图所示

image.svg

图片加载失败



惊奇的发现点了禁用,数据就变两条了,继续点禁用,还是两条,而且删除还删除不了,这样就很蛋疼了...但是一直删不了也不是办法,解决办法也是有的,那就是去zookeeper上删除节点。

5.由于我之前是从事iOS开发的,所以一直用的是Mac电脑,Mac上好像没有特别好用的zookeeper可视化客户端工具,于是我就用了这个idea的zookeeper插件,只要将这个zookeeper节点删除

image.svg

图片加载失败



然后刷新控制台的界面,如下图那么就只剩下一条了

image.svg

图片加载失败



6.那么此时我们再看控制台的输出,已经恢复正常,整个灰度发布流程结束

image.svg

图片加载失败


直入主题

我们先来看看Router的继承体系图

image.svg

图片加载失败



从图中可以看出,他有三个实现类,分别是ConditionRouter,MockInvokersSelector,ScriptRouter
MockInvokersSelector在dubbo源码解析-集群容错架构设计中提到这里就暂时不多做叙述。

ScriptRouter在dubbo的测试用例中就有用到,这个类的源码不多,也就124行.引用官网的描述
脚本路由规则 支持 JDK 脚本引擎的所有脚本,比如:javascript, jruby, groovy 等,通过 type=javascript 参数设置脚本类型,缺省为 javascript。
当然看到这里可能你可能还是没有感觉出这个类有什么不可替代的作用,你注意一下这个类中有个ScriptEngine的属性,那么我可以举一个应用场景给你

假如有这么个表达式如下:


本篇主要讲讲ConditionRouter(条件路由),条件路由主要就是根据dubbo管理控制台配置的路由规则来过滤相关的invoker,当我们对路由规则点击启用的时候,就会触发RegistryDirectory类的notify方法

image.svg

图片加载失败


image.svg

图片加载失败



其实我觉得看技术类文章更重要的是看分析的思路,看的是思考过程,比如为什么这个notify方法传入的是List<URL>呢?如果看过我前两篇dubbo源码解析dubbo源码解析-集群容错架构设计dubbo源码解析-directory就明白,我的分析过程都是以官方文档为依据,所以这个问题的答案自然也在官方文档.下面引用一段官网文档的描述
所有配置最终都将转换为 URL 表示,并由服务提供方生成,经注册中心传递给消费方,各属性对应 URL 的参数,参见配置项一览表中的 "对应URL参数" 列

其实对于Router来说,我们最关心的就是他是怎么过滤的.所以下面这些流程代码我们先走一遍

image.svg

图片加载失败


image.svg

图片加载失败



这个条件路由有一个特点,就是他的getUrl是有值的,同时这里分享一个IDEA中debug查看表达式内容的技巧,比如router.getUrl()表达式的值,如下图所示

image.svg

图片加载失败



从这里我们看到,此时实现类是ConditionRouter,由于接下来的逻辑如果直接让大家看源码图可能不够清晰,所以我又把这个核心的筛选过程用了一个高清无码图,并且用序号标注

image.svg

图片加载失败


CondITIorAOur

三55H学

[invakerE:auitiiinvakarsie)

ytring

tiLisMtchsLabPatternfntch.

murlutiis

Cratcnaher(ur

erbwttthrrittete

Hlzwttenthenieebdtit.n

".Serlcea

txemkegp-o.IaYoiRSru

reshitgatimvakerl:

(result

rnresuiti.

elSEitO

ugetscrwiektirouter

BlLLtFticbeoleotleratemtstrigarcmsrig

catch(ThrowIDleCL.i

oatterrEperan.getRaparanuteratlernspatrin

cwjirctrtiwailtudtoctcodtionouotaou

PuLLIESTTLEBOOLETEMGLOPSTTERISTRINODARTEMSTRIOVTUO)

(.CqusLatoattern/)

送WLENgtnl州司光L0

PULLIEBOLESNnATCHTHENLURLLRLLLPRIRL

returnthenConditionlnuLttcoe

发(2)

Lt店jLJoattE.tcootmp

015155问

Igwaluy_nutiilvaiuo.lengtho).co

HaSTsigoLat.at

A-I!C

returnvatut.agalscpattcrr

eLSeitC1Epattarn.tengtho

returnvatuestartswithlpattcrn.sostrng

elSEiF(O

returnvatue.endskxtatoattern.sutstrng(

else

Strtngprefpx-pattern.tubstr1ng.o.中

0:58UENAWOAMCNCSWONLSOTTI):



最后的筛选结果如下,因为我们在管理后台配置了禁用192.168.56.2,所以最后添加进invokers的就只有192.168.56.3

image.svg

图片加载失败


image.svg

图片加载失败



1 人点赞

1


相关文章
|
8天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2187 12
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
8天前
|
云安全 人工智能 安全
|
8天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
984 1
|
10天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
986 44
|
8天前
|
人工智能 自然语言处理 数据挖掘
最新版通义千问(Qwen3.8-Max-Preview)功能介绍
2026年,通义千问正式推出全新旗舰级大模型 **Qwen3.8-Max-Preview 预览版**,作为首款突破万亿参数规格的新一代基座模型,该模型总参数量达到**2.4万亿**,采用全新迭代的MoE混合专家架构,综合推理性能、长文本处理、多模态理解、复杂任务规划能力全面超越前代Qwen3.7-Max版本,整体实力跻身全球第一梯队,可对标海外顶级旗舰模型,是当前面向复杂工程开发、多智能体协同、超长文档解析、专业办公自动化场景的最优国产基座模型。
990 0
|
6天前
|
自然语言处理 测试技术 API
通义千问Qwen3.8-Max-Preview全功能解析:2.4万亿参数旗舰模型深度使用指南
在大模型技术持续迭代的当下,通义千问推出的Qwen3.8-Max-Preview作为新一代旗舰预览版模型,凭借2.4万亿参数的超大规模、多模态融合能力与全场景适配特性,成为开发者与企业用户探索AI应用的核心工具。该模型采用稀疏混合专家(MoE)架构,是通义千问首个突破万亿参数的多模态模型,可同时处理文本、图像、视频与文档等多种数据形态,在全栈代码开发、复杂逻辑推理、长文档分析与多智能体协作等场景实现跨越式升级。本文将全面拆解Qwen3.8-Max-Preview的核心功能,详解API调用流程与配置方法,覆盖多场景实战技巧,帮助用户快速掌握这款旗舰模型的使用方法,充分释放其性能潜力。
478 1
|
9天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南
Qwen3.8-Max-Preview是通义千问Qwen3系列旗舰MoE大模型,参数达2.4万亿,综合推理能力居行业第一梯队。支持思考/快速双模式,擅长大模型五大高难场景。现于阿里云百炼Token Plan、Qoder及QoderWork上线体验,个人版低至39元/月。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
689 1
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南