You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
source-code-hunter/docs/Dubbo/architectureDesign/Dubbo整体架构.md

69 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 项目结构
首先从 GitHub 上 clone 下来 Dubbo 项目,我们根据其中各子项目的项目名,也能大概猜出来各个模块的作用。
![avatar](../../../images/Dubbo/dubbo项目结构.png)
### dubbo-common
公共逻辑子项目,定义了各子项目中 通用的 组件 和 工具类IO、日志、配置处理等。
### dubbo-rpc
分布式协调服务框架的核心,该模块定义了 RPC 相关的组件,包括 服务发布、服务调用代理、远程调用结果、RPC 调用网络协议RPC 调用监听器和过滤器等等。该模块提供了默认的 基于 dubbo 协议的实现,还提供了 hessian、http、rmi、及 webservice 等协议的实现,能够满足绝大多数项目的使用需求,另外 还提供了对自定义协议的扩展。
### dubbo-registry
注册中心子项目,它是 RPC 中 consumer 服务消费者 和 provider 服务提供者 两个重要角色的协调者,该子项目定义了核心的 注册中心组件,提供了 mutilcast、redis 和 zookeeper 等多种方式的注册中心实现,用于不同的使用场景。当然,几乎所有的项目都会选择基于 zookeeper 的实现。
### dubbo-remoting
远程通讯子项目RPC 的实现基础就是远程通讯consmer 要调用 provider 的远程方法必须通过 远程通讯实现。该模块定义了远程传输器、endpoint 终端、客户端、服务端、编码解码器、数据交换、缓冲区、通讯异常定义 等核心组件。他是对于远程网络通讯的抽象,提供了诸如 netty、mina、http 等 协议和技术框架的实现方式。
### dubbo-monitor
监控子项目,该模块可以监控服务调用的各种信息,例如调用耗时、调用量、调用结果等等,监控中心在调用过程中收集调用的信息,发送到监控服务,在监控服务中可以存储这些信息,对这些数据进行统计分析 和 展示。dubbo 默认提供了一个实现,该实现非常简单,只是作为默认的实现范例,生产环境使用价值不高,往往需要自行实现。
### dubbo-container
容器子项目,是一个独立的容器,以简单的 Main(类) 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。
### dubbo-config
配置中心子项目,该模块通过 配置信息,将 dubbo 组件的各个模块整合在一起,给 框架的使用者 提供 可配置的、易用的 分布式服务框架。它定义了面向 dubbo 使用者的各种信息配置,比如服务发布配置、方法发布配置、服务消费配置、应用程序配置、注册中心配置、协议配置、监控配置等等。
### dubbo-cluster
集群子项目,将多个服务提供方伪装为一个提供方,包括:负载均衡、容错、路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。
### dubbo-admin
该子项目是一个 web 应用,可以独立部署,用于管理 dubbo 服务,该管理应用可以连接注册中心,读取和更新 注册中心中的内容。
## 实现原理
### 角色类型与运行原理
一个 Dubbo 项目 的角色主要分为如下五种。
- Provider服务提供方
- Consumer服务消费方
- Registry服务注册与发现的注册中心
- Container服务运行容器
- Monitor统计服务的调用次数、调用时间 的监控中心。
其运行原理如下图所示。
![avatar](../../../images/Dubbo/Dubbo工作原理图.png)
### 工作原理
最后总结下其工作原理。
1. 服务导出:服务提供方 导出服务,监听服务端口;
2. 服务注册:服务提供方 注册服务信息到注册中心;
3. 服务订阅:服务消费方 订阅关注的服务;
4. 服务发现:当服务地址发生变更时,注册中心通知服务消费端;
5. 远程服务调用 :根据负载均衡策略 选择服务地址,直接调用;
6. 监控:监控器 收集和展示 服务提供方、服务消费方之间 的服务调用统计信息 。