dubbo版本:2.7.X,截至2021.5月最新的版本。
单一/垂直应用架构已经满足不了互联网应用的规模,因为痛所以需要找到解决方案。dubbo的官方背景描述
dubbo能解决什么问题?或者定位要解决什么问题呢?
Dubbo需要解决的是, (1)如何管理繁多的依赖关系? (2)如何进行负载均衡和故障转移(failOver)? (3)如何进行服务治理,请求量,响应时间和容量水位等?
我们回忆下一个基本的RPC框架组成结构需要的是:
具体可以看:RPC框架的核心组件
RPC : 在分布式系统中,计算机程序使一个过程在不同的地址空间中执行,通常是共享网络上的另外一台计算机,而这个地址空间的编码就好像是一个普通的本地调用,没有程序员去远程交互显示的编码。面向对象编程范式中,rpc是由远程方法调用RMI标识。
来自wiki:https://en.wikipedia.org/wiki/Remote_procedure_call
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
(PS:并发量大,但每个用户无需频繁操作情况下需用短连好)
Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。
节点 | 角色说明 |
---|---|
Deployer | 自动部署服务的本地代理 |
Repository | 仓库用于存储服务应用发布包 |
Scheduler | 调度中心基于访问压力自动增减服务提供者 |
Admin | 统一管理控制台 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
源码整个架构模块如下图:
这个模块里面只有一个 pom.xml
,是 Dubbo 的 maven 打包脚本。
这个里面也只有一个 pom.xml
,通过 Maven 的 <dependencyManagement>
统一定义了 Dubbo 项目本身每个包的版本。
该模块是 Dubbo 对所依赖的第三方 jar 包。这里面有zookeeper的依赖管理
该模块是 Dubbo 对所依赖的第三方 jar 包进行了一个统一管理,用于保证同一个 jar 包版本的一致性,避免依赖冲突。
该模块是用于生成RPC框架的stub存根,代码中可以看到除了dubbo还有grpc
Dubbo 准备 发布到中央仓库 # Apache Release 会打包到此目录。个人项目一般会打包到公司的私服统一管理,现在dubbo归Apache管理。
这两个包是对代码风格进行管理
这个模块是服务器IP的配置中心管理,比如常用的配置中心
这个模块是服务器IP的注册模块
集群模块负责把多个服务提供者封装为一个,并提供负载均衡, 集群容错,路由,分组聚合等功能,集群的地址列表可以静态配置,也可以由配置中心下发。
这个模块是由于dubbo非常好的集成了Spring,提供了SPI,这里对于springBean的容器管理,以及日志容器管理
并且是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。
dubbo-container-api
:定义了 com.alibaba.dubbo.container.Container
接口,里面包含了容器的 start()
和 stop()
方法,并提供加载所有容器启动的 Main 类。dubbo-container-api
dubbo-container-spring
,提供了 com.alibaba.dubbo.container.spring.SpringContainer
。dubbo-container-log4j
,提供了 com.alibaba.dubbo.container.log4j.Log4jContainer
。dubbo-container-logback
,提供了 com.alibaba.dubbo.container.logback.LogbackContainer
。这个模块是dubbo的API接口或者Spring的方式进行暴露对外使用。
这个模块是用于监控整个框架中的元数据收集上报,接口,序列化,注册,执行器,注册,故障转移等
这个模块是通过Metric进行监控,达到服务的可观测性
这个模块是列举了所有的rpc目前支持的通讯协议
这个模块是列举了支持的序列化框架
这个模块列举了网络通信交互的支持方式,一般常用的还是Netty和mina。
这个模块是过滤器
dubbo-filter-cache
,缓存过滤器。dubbo-filter-validation
,参数验证过滤器。这个模块主要是一些工具类和通用模型。与其他业务系统的公共包一样。
这个模块主要是针对版本升级2.7.X的一些,官方说是因为改变了报名所以需要有些类的适配
From 2.7.x, `Dubbo` has renamed package to `org.apache.dubbo`, so `dubbo-compatible` module is provided
这个模块是鉴权以及扩展插件模块
这个模块提供了不同方式的测试demo,在实际使用中可以进行借鉴
这个模块主要是对于SpringBoot的应用兼容
本篇主要拆解了dubbo框架源码的架构核心模块,目的是对于整个架构有个简单了解,并知道如果要深入学习哪些是核心模块,我们需要关注的内容。
后续系列持续更.....
官方dubbo地址:https://dubbo.apache.org/zh/docs/v2.7/user/preface/background/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。