diff --git a/dubbo-cluster/readme.md b/dubbo-cluster/readme.md new file mode 100644 index 000000000000..95ba44841d0b --- /dev/null +++ b/dubbo-cluster/readme.md @@ -0,0 +1,28 @@ + ## dubbo-cluster + > 集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡, 集群容错,路由,分组聚合等。集群的地址列表可以是静态配置的,也可以是由注册中心下发。 + +注册中心下发,由 dubbo-registry 提供特性。 + +### 容错 +> com.alibaba.dubbo.rpc.cluster.Cluster 接口 + com.alibaba.dubbo.rpc.cluster.support 包。 +Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个。 +拓展参见 《Dubbo 用户指南 —— 集群容错》 和 《Dubbo 开发指南 —— 集群扩展》 文档。 + +### 目录 +> com.alibaba.dubbo.rpc.cluster.Directory 接口 + com.alibaba.dubbo.rpc.cluster.directory 包。 +Directory 代表了多个 Invoker ,可以把它看成 List ,但与 List 不同的是,它的值可能是动态变化的,比如注册中心推送变更。 + +### 路由 +> com.alibaba.dubbo.rpc.cluster.Router 接口 + com.alibaba.dubbo.rpc.cluster.router 包。 +负责从多个 Invoker 中按路由规则选出子集,比如读写分离,应用隔离等。 + +### 配置 +> 接口 + com.alibaba.dubbo.rpc.cluster.configurator 包。 + +### 负载均衡 +> com.alibaba.dubbo.rpc.cluster.LoadBalance 接口 + com.alibaba.dubbo.rpc.cluster.loadbalance 包。 +LoadBalance 负责从多个 Invoker 中选出具体的一个用于本次调用,选的过程包含了负载均衡算法,调用失败后,需要重选。 + +### 整体流程如下 + +![](流程图.jpg) diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Cluster.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Cluster.java index e5ecb157c050..64596475b042 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Cluster.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Cluster.java @@ -33,6 +33,11 @@ public interface Cluster { /** + * + *
+     * com.alibaba.dubbo.rpc.cluster.Cluster 接口 + com.alibaba.dubbo.rpc.cluster.support 包。
+     * Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个。
+     * 
* Merge the directory invokers to a virtual invoker. * * @param diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Configurator.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Configurator.java index aa229fabc553..ef0b5765bed2 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Configurator.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Configurator.java @@ -19,6 +19,8 @@ import org.apache.dubbo.common.URL; /** + * + * 配置 com.alibaba.dubbo.rpc.cluster.configurator 包 * Configurator. (SPI, Prototype, ThreadSafe) * */ diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Directory.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Directory.java index 67f021659e77..0df8f8c0e1df 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Directory.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Directory.java @@ -33,6 +33,11 @@ public interface Directory extends Node { /** + * + *
+     *     com.alibaba.dubbo.rpc.cluster.Directory 接口 + com.alibaba.dubbo.rpc.cluster.directory 包。
+     * Directory 代表了多个 Invoker ,可以把它看成 List ,但与 List 不同的是,它的值可能是动态变化的,比如注册中心推送变更。
+     * 
* get service type. * * @return service type. diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/LoadBalance.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/LoadBalance.java index 4e6ced18a0e5..c368a4d4f873 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/LoadBalance.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/LoadBalance.java @@ -27,6 +27,10 @@ import java.util.List; /** + *
+ *     com.alibaba.dubbo.rpc.cluster.LoadBalance 接口 + com.alibaba.dubbo.rpc.cluster.loadbalance 包。
+ * LoadBalance 负责从多个 Invoker 中选出具体的一个用于本次调用,选的过程包含了负载均衡算法,调用失败后,需要重选。
+ * 
* LoadBalance. (SPI, Singleton, ThreadSafe) *

* Load-Balancing diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Merger.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Merger.java index 64bccf8cbdd5..1c1b227f31b2 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Merger.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Merger.java @@ -18,6 +18,12 @@ import org.apache.dubbo.common.extension.SPI; +/** + * 合并结果 + * com.alibaba.dubbo.rpc.cluster.Merger 接口 + com.alibaba.dubbo.rpc.cluster.merger 包。 + * 合并返回结果,用于分组聚合。 + * @param + */ @SPI public interface Merger { diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java index 47aa2515a3c0..655b807da7c4 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java @@ -24,6 +24,11 @@ import java.util.List; /** + *

+ * com.alibaba.dubbo.rpc.cluster.Router 接口 + com.alibaba.dubbo.rpc.cluster.router  包。
+ * 负责从多个 Invoker 中按路由规则选出子集,比如读写分离,应用隔离等。
+ * 
+ *

* Router. (SPI, Prototype, ThreadSafe) *

* Routing diff --git "a/dubbo-cluster/\346\265\201\347\250\213\345\233\276.jpg" "b/dubbo-cluster/\346\265\201\347\250\213\345\233\276.jpg" new file mode 100644 index 000000000000..ca8e7340a748 Binary files /dev/null and "b/dubbo-cluster/\346\265\201\347\250\213\345\233\276.jpg" differ diff --git a/dubbo-common/readme.md b/dubbo-common/readme.md new file mode 100644 index 000000000000..7f23fad64124 --- /dev/null +++ b/dubbo-common/readme.md @@ -0,0 +1,3 @@ +## dubbo-common + +> 公共逻辑模块:提供工具类和通用模型 \ No newline at end of file diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java index a83ca91e227e..9e6bfb549b54 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java @@ -38,6 +38,12 @@ /** * URL - Uniform Resource Locator (Immutable, ThreadSafe) + * + *

+ * 格式为 protocol://username:password@host:port/path?key=value&key=value ,通过 URL#buildString(...) 方法生成。
+ * parameters 属性,参数集合。从上面的 Service URL 例子我们可以看到,里面的 key=value ,实际上就是 Service 对应的配置项。
+ * 该属性,通过 AbstractConfig#appendParameters(parameters, config, prefix) 方法生成。
+ * 
*

* url example: *