分享 Dubbo 的项目结构 ,经过本文能够大体了解到Dubbo整个项目的结构html
将一个项目进行拆分, 进行分布式架构。前端
须要解决下面的问题java
分布式服务架构git
dubbo解决下面几个需求github
节点角色说明算法
节点 | 角色说明 |
---|---|
Provider |
暴露服务的服务提供方 |
Consumer |
调用远程服务的服务消费方 |
Registry |
服务注册与发现的注册中心 |
Monitor |
统计服务的调用次数和调用时间的监控中心 |
Container |
服务运行容器 |
调用关系说明spring
Dubbo 架构 下面特色 连通性、健壮性、伸缩性、以及向将来架构的升级性数据库
节点角色说明apache
节点 | 角色说明 |
---|---|
Deployer |
自动部署服务的本地代理 |
Repository |
仓库用于存储服务应用发布包 |
Scheduler |
调度中心基于访问压力自动增减服务提供者 |
Admin |
统一管理控制台 |
Registry |
服务注册与发现的注册中心 |
Monitor |
统计服务的调用次数和调用时间的监控中心 |
模块分包 每一个模块都是相互隔离的,可插拔的。下面的这个图是模块引用图api
下面对着这些模块作个简单介绍
dubbo-cluster
** 集群模块**:将多个服务提供方假装为一个提供方,
包括:负载均衡, 容错,路由等,集群的地址列表能够是静态配置的,也能够是由注册中心下发。
总体上按照分层结构进行分包,与分层的不一样点在于:
图例说明:
公共逻辑模块:包括 Util 类和通用模型。
做用提供一些工具类和通用模型 例如
com.alibaba.dubbo.common.URL
:
远程通信模块:至关于 Dubbo 协议的实现,若是 RPC 用 RMI协议则不须要使用此包。
dubbo-remoting-api
远程调用模块:抽象各类协议,以及动态代理,只包含一对一的调用,不关心集群的管理
集群相关的管理,由 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 开发指南 —— 配置设计》 。
容器模块:是一个 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