分享 Dubbo 的项目结构 ,通过本文可以大致了解到Dubbo整个项目的结构
将一个项目进行拆分, 进行分布式架构。
分布式服务架构
dubbo解决下面几个需求
节点 | 角色说明 |
---|---|
Provider |
暴露服务的服务提供方 |
Consumer |
调用远程服务的服务消费方 |
Registry |
服务注册与发现的注册中心 |
Monitor |
统计服务的调用次数和调用时间的监控中心 |
Container |
服务运行容器 |
节点 | 角色说明 |
---|---|
Deployer |
自动部署服务的本地代理 |
Repository |
仓库用于存储服务应用发布包 |
Scheduler |
调度中心基于访问压力自动增减服务提供者 |
Admin |
统一管理控制台 |
Registry |
服务注册与发现的注册中心 |
Monitor |
统计服务的调用次数和调用时间的监控中心 |
**模块分包 ** 每个模块都是相互隔离的,可插拔的。下面的这个图是模块引用图
** 集群模块**:将多个服务提供方伪装为一个提供方,
包括:负载均衡, 容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。
整体上按照分层结构进行分包,与分层的不同点在于:
图例说明:
公共逻辑模块:包括 Util 类和通用模型。
作用提供一些工具类和通用模型例如 com.alibaba.dubbo.common.URL
:
远程通讯模块:相当于 Dubbo 协议的实现,如果 RPC 用 RMI协议则不需要使用此包。
dubbo-remoting-api
dubbo-remoting-grizzly
,基于 Grizzly 实现。 dubbo-remoting-http
,基于 Jetty 或 Tomcat 实现。 dubbo-remoting-mina
,基于 Mina 实现。 dubbo-remoting-netty
,基于 Netty 3 实现。 dubbo-remoting-netty4
,基于 Netty 4 实现。 dubbo-remoting-p2p
,P2P 服务器。注册中心 dubbo-registry-multicast
项目的使用该项目。 远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理
集群相关的管理,由 dubbo-cluster
提供特性
dubbo-rpc-api
dubbo-rpc-api
,提供对应的协议实现
dubbo-rpc-default
dubbo://
协议。 集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡, 集群容错,路由,分组聚合等。集群的地址列表可以是静态配置的,也可以是由注册中心下发。
dubbo-registry
提供特性。
com.alibaba.dubbo.rpc.cluster.Cluster
接口 + com.alibaba.dubbo.rpc.cluster.support
包。 com.alibaba.dubbo.rpc.cluster.Directory
接口 + com.alibaba.dubbo.rpc.cluster.directory
包。 com.alibaba.dubbo.rpc.cluster.Router
接口 + com.alibaba.dubbo.rpc.cluster.router
包。 Invoker
中按路由规则选出子集,比如读写分离,应用隔离等。 com.alibaba.dubbo.rpc.cluster.Configurator
接口 + com.alibaba.dubbo.rpc.cluster.configurator
包。 com.alibaba.dubbo.rpc.cluster.LoadBalance
接口 + com.alibaba.dubbo.rpc.cluster.loadbalance
包。 com.alibaba.dubbo.rpc.cluster.Merger
接口 + com.alibaba.dubbo.rpc.cluster.merger
包。 整体流程如下:
注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。
dubbo-registry-api
, 抽象 注册中心的注册与发现接口。 dubbo-registry-api
,提供对应的注册中心实现。在 《用户指南 —— 注册中心参考手册》 中,可以看到每种注册中心的介绍。 dubbo-registry-default
对应 Simple 注册中心。 监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务
配置模块:是 Dubbo 对外的 API,用户通过 Config 使用Dubbo,隐藏 Dubbo 所有细节。
dubbo-config-api
,实现了 API 配置 和 属性配置 功能。 dubbo-config-spring
,实现了 XML 配置 和 注解配置 功能。 推荐阅读 《Dubbo 开发指南 —— 配置设计》 。
容器模块:是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,
因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。
dubbo-container-api
:定义了 com.alibaba.dubbo.container.Container
接口,并提供 加载所有容器启动的 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 用户指南 —— 服务容器》 和 《Dubbo 开发指南 —— 容器扩展》 文档。
过滤器模块:提供了 内置 的过滤器。
dubbo-filter-cache
,缓存过滤器。
dubbo-filter-validation
,参数验证过滤器。
过滤器模块:提供了 内置 的插件。
dubbo-qos
,提供在线运维命令。
hessian-lite
:Dubbo 对 Hessian 2 的 序列化 部分的精简、改进、BugFix 。
提交历史如下:
dubbo-demo
快速启动示例 。
参见 《Dubbo 用户指南 —— 快速启动》 文档。
dubbo-test
测试模块 。
dubbo-test-benchmark
,性能测试。
dubbo-test-compatibility
,兼容性测试。
dubbo-test-spring3
,测试对 Spring 3 的兼容性。 dubbo-test-example
, 使用示例 。 dubbo-dependencies-bom/pom.xml
,Maven BOM(Bill Of Materials) , 统一 定义了 Dubbo 依赖的三方库的版本号:
dubbo-parent
会引入该 BOM :
dubbo-bom/pom.xml
,Maven BOM(Bill Of Materials) , 统一 定义了 Dubbo 的版本号:
dubbo/pom.xml
,Dubbo Parent Pom 。
Dubbo 的 Maven 模块,都会引入该 pom 文件。以 dubbo-cluster
举例子:
dubbo/all/pom.xml
,Dubbo All Pom ,定义了 Dubbo 的 打包脚本 。
我们在使用 Dubbo 库时,引入该 pom 文件。
引用参考自 下列文章
http://svip.iocoder.cn/Dubbo/intro/
https://dubbo.incubator.apache.org/zh-cn/docs/user/preface/background.html
https://dubbo.incubator.apache.org/zh-cn/docs/user/preface/architecture.html
https://dubbo.incubator.apache.org/zh-cn/docs/dev/build.html
Previous
深入了解机器学习