dubbo 路由配置_dubbo源码分析初识dubbo架构

点击蓝字关注我

dubbo源码分析--初识dubbo架构

最近一直在看dubbo 源码,总是静不下来,漂在表面,做了一些笔记,但是想想,很多东西总是要靠自己写一写,记录一下,才会有不一样的收获和心得,我想逼自己一把,所以关于dubbo 源码解析,不如大家理解为dubbo源码导读和笔记吧。

1.Dubbo你到底是什么?

dubbo 官方文档

http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

dubbo

的官方文档可能是我见过写的最好的官方文档了,没有之一,所以官方文档上说:Apache Dubbo是一款高性能、轻量级基于Java的RPC开源框架

  e03f37cb03faaa7ec748dda3172cbad6.png

二:什么是rpc?

我之前有写过一片介绍RPC的文章

https://blog.csdn.net/CoreyXuu/article/details/106397232 

感兴趣可以看看

这里简单解释下:RPC英文全名为Remote Procedure Call 也叫远程调用,其实就是一个计算机通讯协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

  e03f37cb03faaa7ec748dda3172cbad6.png

三:http 和 Rpc 协议有什么区别?(记住,后面要考的)

     我们都知道http 属于应用层面的,而http是跨越了应用层和传输层,http本身的三次握手,每发送一次请求,都会又一次建立连接的过程,那么相对的肯定会带来一定的延迟,而http本身的报文很大,而RPC则可以更具需求进行连接,调用结束后就会断掉,也可以是长连接,多个远程过程调用共享同一个链接,所以RPC和效率相比较http的效率高一些,但是相对于开发简单快速的HTTP服务,RPC服务就会显得复杂一些。

  e03f37cb03faaa7ec748dda3172cbad6.png

四:dubbo的版本策略

    这个地方我深有体会,为此我还专门总结了一套文档(工作需求)

量大版本并行发展:

2.5.x是稳定版本

2.6.x是新功能实验版本

2.6 上 实验都稳定以后,会迁移到2.5版本

2.7 上也是实验版本,实验稳定也会迁移到2.5

所以如果你想了解dubbo最新 最牛逼的功能,可以选择2.6 -2.7 版本。

所以接下来我会专门介绍2.7.x版本

  e03f37cb03faaa7ec748dda3172cbad6.png

五.dubbo 框架设计

首先来看下dubbo的框架设计

59bbc0a10ca7d2e952e792ce05ed20a2.png

可以看到dubbo被拆分成很多maven项目,屏幕太小没有截全,接下来我介绍下每个模块的作用,官方文档有一个这样的图

b36f186e5269069279c7ed482e78446f.png

dubbo中maven相关的依赖

dubbo-bom/pom,利用maven bom统一定义了dubbo的版本好,dubbo-demo中的pom文件中都会引用,dubbo-bom/pom.xml, 例如dubbo-demo

c28ffc3a19487a08e2aad2e62ba6c266.png

dubbo-dependencies-bom/pom.xml:利用Maven BOM统一定义了dubbo依赖的第三方库的版本号。dubbo-parent会引入该bom:

ffa7f5341c3627892d392723ac0365a2.png

all/pom.xml:定义了dubbo的打包脚本,使用dubbo库的时候,需要引入改pom文件。
dubbo-parent:是dubbo的父pom,dubbo的maven模块都会引入该pom文件。

  e03f37cb03faaa7ec748dda3172cbad6.png

模块介绍------------------------模块介绍

  e03f37cb03faaa7ec748dda3172cbad6.png

一:dubbo-common:公共逻辑模块

官方:包括 Util 类和通用模型。

我的理解是:工具类就是一些公用的地方,通用模型就是贯穿整合项目的统一格式的模型,比如URL和,上述就提到了URL贯穿了整个项目。

9fc9e88f0610546cf11cba8148ae26c5.png  e03f37cb03faaa7ec748dda3172cbad6.png

二:dubbo-remoting:远程通讯模块

官网:相当于dubbo协议的实现,如果 RPC 用 RMI协议则不需要使用此包。

个人理解:提供了各种客户端和服务端的通信功能,例如;grizzly,netty,tomcat,RPC除了rmi的协议都要用到此模块

6056c06a0ddbb08ec3f760ee23437bcf.png

1.dubbo-remoting-api:定义了客户端和服务端的连接

2.dubbo-remoting-grizzly;基于grizzly实现的service和client

3.dubbo-remoting-http;基于Jetty或Tomcat实现的Client和Server。

4.dubbo-remoting-mina;基于Mina实现的Client和Server。

5.dubbo-remoting-netty4;基于Netty4实现的Client和Server

6.dubbo-remoting-p2p; P2P服务器,注册中心multicast中会用到这个服务器使用

7.dubbo-remoting-zookeeper:封装了Zookeeper Client ,和 Zookeeper Server 通信

  e03f37cb03faaa7ec748dda3172cbad6.png

三:dubbo-rpc:远程调用模块

官网:抽象各种协议,以及动态代理,只包含1对1的调用,不关心集群的管理

个人理解:远程调用,最主要的肯定是协议,dubbo提供了非常多的协议实现,不过官方推荐的还是自己的dubbo协议,还给出了一份性能检测报告

性能报告地址

http://dubbo.apache.org/zh-cn/docs/user/perf-test.html

这个模块依赖与dubbo-remoting模块,抽象了各类的协议。

d768656970d5ab5477e4888ccdb66598.png

dubbo-rpc-api 抽象了动态代理的各种协议,实现了一对一的调用包都是各种协议的实现

  e03f37cb03faaa7ec748dda3172cbad6.png

dubbo-cluster:集群模块

将多个服务提供方伪装为一个提供方,包括,负载均衡,容错,路由等,集群的地址列表可以是静态配置,也可以是注册中心下发

173501b7b6aa73bc3b884af5caa5eaca.png

自己的理解为:这个是一个解决出错情况的采用的策略,这个模块里封装了多个策略的实现方法。并且也支持自己扩展集群容错策略,cluster把多个Invoker伪装成一个Invoker,并且在伪装的过程中加入了容错逻辑,失败了重试下一个!
如下图dubbo-cluster 目录结构

76344b138b33884818f946a30fd09918.png

1.configurator包:配置包,dubbo的基本设计原理都是采用url作为配置信息的统一格式,所有拓展点都通过传递URL携带配置信息,这个包就是更具统一配置规则生成配置信息

2.directory包;Directory代表了多个Invoker,并且它的值会随着注册中心的服务变更推送而变化,这里介绍下Invoker,Invoker是Provider的一个调用Service的抽象,Invoker封装了Provider地址以及Service接口信息。

3.loadbalance包;封装了负载均衡的实现,负责利用负载均衡算法,从多个Invoker中选出具体的一个Invoker用于此次的调用,如果调用失败,则需要重新选择。

4.merger包:封装了合并返回结果,分组聚合到方法,支持多种数据结构类型。

5.router包:封装了路由规则的实现,路由规则决定了一次dubbo服务调用的目标服务器,路由规则分两种:条件路由规则和脚本路由规则,并且支持可拓展。

6.support包:封装了各类Invoker和cluster,包括集群容错模式和分组聚合的cluster以及相关的Invoker。

7.governance包:spi 扩展服务治理包

8.interceptor包:选择一个特定的地址调用程序之前在最外层工作

  e03f37cb03faaa7ec748dda3172cbad6.png

dubbo-registry:注册中心模块

官方:基于注册中心下发地址的集群方式以及对各种注册中心的抽象

自己理解为:dubbo注册中心的实现是由Multicast注册中心,zookeeper注册中心,和Redis注册中心,eurrka注册中心,sofa注册中心,具体怎么实现,后面在总结一下,这个模块封装了dubbo所支持的注册中心的实现

35c519ca11ca911118f1a642810dcd81.png

1.dubbo-registry-api:抽象了注册中心的注册发现,实现了一些公用的方法,让子类只关注重要的方法,

2.接下来的就是模块就是注册中心的实现方法的封装,其中dubbo-registry-default就是官方文档里面的Simple注册中心。

  e03f37cb03faaa7ec748dda3172cbad6.png

dubbo-monitor:监控模块

官方: 统计服务调用次数,调用时间的,调用链跟踪的服务
个人理解:
这个模块很清楚,就是对服务的监控

f5d76a28806f0000d34e54eff70e1b16.png

1.dubbo-monitor-api;定义了monitor相关的接口,实现了监控所需要的过滤器
2.dubbo-monitor-default;实现了dubbo相关的监控功能

  e03f37cb03faaa7ec748dda3172cbad6.png

dubbo-config:配置模块

官网:是dubbo对外的api,通过config使用dubbo模块,隐藏dubbo所有细节

个人理解就是:用户都是使用配置来使用api,dubbo提供了四种配置方式,包括xml,属性配置,api配置,注解配置,配置模块就是实现了这四种配置

80766678ee5fe3bed85753de489dddc2.png

dubbo-config-api 实现了api配置和属性配置的功能

dubbo-config-spring 实现了xml配置和注解配置

  e03f37cb03faaa7ec748dda3172cbad6.png

官方:是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务.(这个是重点,记住,要考的!!)

个人理解:因为后台不需要tomcat/joboss等容器的功能,不需要用这些厚重的容器去加载服务的提供方,既浪费资源,又增加了复杂度,服务容器只是一个简单的main方法,加载一些内置容器,也支持扩展容器

05585a49861033c7f1c5044d9c200aec.png

dubbo-container-api:定义了Container接口,实现了服务加载的Main方法。

其他三个分别提供了对应的容器,供Main方法加载

  e03f37cb03faaa7ec748dda3172cbad6.png

dubbo-demo 示例模块

这个模块示快速启动示例,包含了服务提供和服务调用,注册中心示multicast,调用方式是xml 具体比较简单,可以参见官方文档
http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

24d31e4f13a591ceb10432204f19ce6f.png  e03f37cb03faaa7ec748dda3172cbad6.png

dubbo-filter 过滤器模块

这个模块提供了内置的一些过滤器

397f6a4c8b2f4aa7948f392fa3779985.png

dubbo-filter-cache 提供缓存过滤器

dubbo-filter-validation;提供参数校验过滤器

  e03f37cb03faaa7ec748dda3172cbad6.png

dubbo-plugs 过滤器模块

提供内置插件

8cef21818df1a255edb75910721c8c2d.png

dubbo-qos:提供了在线运维的命令。
dubbo-auth:提供了权限控制

  e03f37cb03faaa7ec748dda3172cbad6.png

dubbo-serialization——序列化模块

该组件提供了支持各种序列化框架的实现

83415be7e80eb91a7660768ef96073c4.png
  1. dubbo-serialization-api:定义了Serialization的接口以及数据输入输出的接口。

  2. 其他的包都是实现了对应的序列化框架的方法。dubbo内置的就是这几类的序列化框架,序列化也支持扩展

Reference
http://dubbo.apache.org/zh-cn/docs/user/new-features-in-a-glance.html

 

徐卖狼一脚

微信号 :corey

d17d638d6822828f3215d327e940d822.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值