From 16ca64858b9a7cfe9fff999ba3fb96670903227f Mon Sep 17 00:00:00 2001
From: AmyliaY <471816751@qq.com>
Date: Mon, 1 Jun 2020 19:48:08 +0800
Subject: [PATCH] =?UTF-8?q?Dubbo=E6=95=B4=E4=BD=93=E6=9E=B6=E6=9E=84.md?=
=?UTF-8?q?=E3=80=81Dubbo=E4=B8=8EJava=E7=9A=84SPI=E6=9C=BA=E5=88=B6.md=20?=
=?UTF-8?q?=E5=86=85=E5=AE=B9=E4=BF=AE=E7=BC=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/Dubbo/SPI/Dubbo与Java的SPI机制.md | 8 ++--
.../architectureDesign/Dubbo整体架构.md | 43 +++++++++++--------
2 files changed, 28 insertions(+), 23 deletions(-)
diff --git a/docs/Dubbo/SPI/Dubbo与Java的SPI机制.md b/docs/Dubbo/SPI/Dubbo与Java的SPI机制.md
index c638ffc..f701ced 100644
--- a/docs/Dubbo/SPI/Dubbo与Java的SPI机制.md
+++ b/docs/Dubbo/SPI/Dubbo与Java的SPI机制.md
@@ -1,7 +1,7 @@
## JDK的SPI思想
-SPI,即Service Provider Interface。在面向对象的设计里面,模块之间推荐基于接口编程,而不是对实现类进行硬编码,这样做也是为了模块设计的可拔插原则。
+SPI,即 Service Provider Interface。在面向对象的设计里面,模块之间推荐基于接口编程,而不是对实现类进行硬编码,这样做也是为了模块设计的可插拔原则。
-比较典型的应用,如 JDBC,Java 定义了一套 JDBC 的接口,但是 Java 本身并不提供对 JDBC 的实现类,而是开发者根据项目实际使用的数据库来选择驱动程序jar包,比如 mysql,你就将 mysql-jdbc-connector.jar 引入进来;oracle,你就将 oracle-jdbc-connector.jar 引入进来。在系统跑的时候,碰到你使用 jdbc 的接口,他会在底层使用你引入的那个 jar 中提供的实现类。
+比较典型的应用,如 JDBC,Java 定义了一套 JDBC 的接口,但是 Java 本身并不提供对 JDBC 的实现类,而是开发者根据项目实际使用的数据库来选择驱动程序 jar包,比如 mysql,你就将 mysql-jdbc-connector.jar 引入进来;oracle,你就将 oracle-jdbc-connector.jar 引入进来。在系统跑的时候,碰到你使用 jdbc 的接口,他会在底层使用你引入的那个 jar 中提供的实现类。
## Dubbo的SPI扩展机制原理
dubbo自己实现了一套SPI机制,并对 JDK的SPI进行了改进。
@@ -25,13 +25,11 @@ public interface Protocol {
/**
* Get default port when user doesn't config the port.
- *
- * @return default port
*/
int getDefaultPort();
/**
- * 暴露远程服务:
+ * 暴露远程服务:
* 1. 协议在接收请求时,应记录请求来源方地址信息:RpcContext.getContext().setRemoteAddress();
* 2. export() 必须是幂等的,也就是暴露同一个 URL 的 Invoker 两次,和暴露一次没有区别。
* 3. export() 传入的 Invoker 由框架实现并传入,协议不需要关心。
diff --git a/docs/Dubbo/architectureDesign/Dubbo整体架构.md b/docs/Dubbo/architectureDesign/Dubbo整体架构.md
index eaf3731..13520ef 100644
--- a/docs/Dubbo/architectureDesign/Dubbo整体架构.md
+++ b/docs/Dubbo/architectureDesign/Dubbo整体架构.md
@@ -1,27 +1,34 @@
## 项目结构
-首先从GitHub 上 down下来Dubbo项目,我们根据里面的目录名 也能大概猜出来各个模块的作用。
+首先从GitHub 上 clone下来 Dubbo项目,我们根据其中各子项目的项目名,也能大概猜出来各个模块的作用。
![avatar](../../../images/Dubbo/dubbo项目结构.png)
-### dubbo-common
-公共逻辑模块,定义了各模块中 通用的 组件 和 工具类,如:IO、日志、配置处理等。
+### dubbo-common
+公共逻辑子项目,定义了各子项目中 通用的 组件 和 工具类,如:IO、日志、配置处理等。
### dubbo-rpc
分布式协调服务框架的核心,该模块定义了 RPC相关的组件,包括 服务发布、服务调用代理、远程调用结果、RPC调用网络协议,RPC调用监听器和过滤器等等。该模块提供了默认的 基于dubbo协议的实现,还提供了hessian、http、rmi、及webservice等协议的实现,能够满足绝大多数项目的使用需求,另外 还提供了对自定义协议的扩展。
-### dubbo registry
-注册中心,它是 RPC 中 consumer 和 provider 两个重要角色的协调者,该模块定义了核心的 注册中心组件,提供了mutilcast、redis和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使用者的各种信息配置,比如服务发布配置、方法发布配置、服务消费配置、应用程序配置、注册中心配置、协议配置、监控配置等等。
-### dubbo cluster
-集群模块,将多个服务提供方伪装为一个提供方,包括:负载均衡、容错、路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。
-### dubbo admin
-该项目是一个web应用,可以独立部署,用于管理dubbo服务,该管理应用可以连接注册中心,读取和更新 注册中心中的内容。
+
+### 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服务,该管理应用可以连接注册中心,读取和更新 注册中心中的内容。
## 实现原理
### 角色类型与运行原理
@@ -42,5 +49,5 @@ dubbo配置模块,该模块通过 配置信息,将dubbo组件的各个模块
2. 服务注册:服务提供方 注册服务信息到注册中心;
3. 服务订阅:服务消费方 订阅关注的服务;
4. 服务发现:当服务地址发生变更时,注册中心通知服务消费端;
-5. 远程服务调用 (RPC) :根据负载均衡策略 选择服务地址,直接调用;
+5. 远程服务调用 :根据负载均衡策略 选择服务地址,直接调用;
6. 监控:监控器 收集和展示 服务提供方、服务消费方之间 的服务调用统计信息 。
\ No newline at end of file