Dubbo 架构简介
dubbo-common 模块:
公共模块,有比较多的工具类以及公共逻辑。
dubbo-remoting 模块:
远程通信模块,子模块依赖各种开源组件实现远程通信,在api中定义该模块的抽象概念,在其他子模块中依赖其他开源组件的实现。
例如:
dubbo-remoting-netty4 子模块依赖 Netty 4 实现远程通信;
dubbo-remoting-zookeeper 通过 Apache Curator 实现与 ZooKeeper 集群的交互。
dubbo-rpc 模块:
对远程调用协议进行抽象的模块。
依赖于remonting模块的远程调用功能。api字模块是其抽象模块,其他子模块是针对具体协议的实现。
例如:
dubbo-rpc-dubbo 子模块是对 Dubbo 协议的实现,依赖了 dubbo-remoting-netty4 等 dubbo-remoting 子模块。 dubbo-rpc 模块的实现中只包含一对一的调用,不关心集群的相关内容。
dubbo-cluster 模块:
负责管理集群的功能,提供了负载均衡,容错,路由等一系列集群相关的内容,将多个provider包装成一个provider,这样customer就像调一个provider一样调用整个集群。
dubbo-registry 模块:
负责与多种开源注册中心进行交互的模块,提供注册中心的能力。其中,dubbo-registry-api 子模块是顶层抽象,其他子模块是针对具体开源注册中心组件的具体实现。
例如,dubbo-registry-zookeeper 子模块是 Dubbo 接入 ZooKeeper 的具体实现。
dubbo-monitor 模块:
Dubbo 的监控模块,主要用于统计服务调用次数、调用时间以及实现调用链跟踪的服务。
dubbo-config 模块
配置模块,主要负责解析各种配置。
- 例如,dubbo-config-api 子模块负责处理 API 方式使用时的相关配置,dubbo-config-spring 子模块负责处理与 Spring 集成使用时的相关配置方式。有了 dubbo-config 模块,用户只需要了解 Dubbo 配置的规则即可,无须了解 Dubbo 内部的细节。
dubbo-metadata 模块
元数据模块。也有一个api子模块进行抽象。
dubbo-configcenter 模块: Dubbo 的动态配置模块,主要负责外部化配置以及服务治理规则的存储与通知,提供了多个子模块用来接入多种开源的服务发现组件。
接下来我们需要着重讨论几个重要的问题:
Dubbo如何与ZK等注册中心进行交互的?
provider与consumer之间是如果交互的?
为什么我们在编写代码时感受不到网络交互?
prvider部署到zk上的数据时什么?consemer如何正确识别?两者的契约是什么?
如何进行扩展?