From 1952d157c3771246838677e04594fdf603362f8d Mon Sep 17 00:00:00 2001 From: AmyliaY <471816751@qq.com> Date: Sun, 26 Apr 2020 23:10:03 +0800 Subject: [PATCH] =?UTF-8?q?Dubbo=E9=9B=86=E7=BE=A4=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=AE=80=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Dubbo/cluster/Dubbo集群模块简析.md | 138 ++++++++++++++++++ ...com.alibaba.dubbo.rpc.cluster包目录.png | Bin 0 -> 12679 bytes .../Dubbo/dubbo-cluster模块工程结构.png | Bin 0 -> 38398 bytes 3 files changed, 138 insertions(+) create mode 100644 docs/Dubbo/cluster/Dubbo集群模块简析.md create mode 100644 images/Dubbo/com.alibaba.dubbo.rpc.cluster包目录.png create mode 100644 images/Dubbo/dubbo-cluster模块工程结构.png diff --git a/docs/Dubbo/cluster/Dubbo集群模块简析.md b/docs/Dubbo/cluster/Dubbo集群模块简析.md new file mode 100644 index 0000000..92a5d29 --- /dev/null +++ b/docs/Dubbo/cluster/Dubbo集群模块简析.md @@ -0,0 +1,138 @@ +### 集群模块简介 +集群,是指同一个服务 被部署在了多个服务器上,每个服务器的任务都相同,能够以较高的性价比,提升系统的 性能、可靠性、灵活性,但同时也要面对 集群中会出现的 负载均衡、容错等问题。dubbo的集群模块,主要涉及以下几部分内容。 +- 负载均衡策略:dubbo支持的所有负载均衡策略算法; +- 集群容错:Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个; +- 路由:dubbo路由规则,路由规则决定了一次dubbo服务调用的目标服务器,路由规则分两种:条件路由规则和脚本路由规则,并且支持可拓展; +- 配置:根据url上的配置规则生成配置信息; +- 分组聚合:合并返回结果; +- 本地伪装:mock通常用于服务降级,mock只在非业务异常时执行,如 超时、网络异常等。 + +集群工作过程可分为两个阶段,第一个阶段是在消费者初始化期间,集群 Cluster 为消费者创建 ClusterInvoker 实例。第二个阶段是在消费者进行RPC时,以 FailoverClusterInvoker 为例,该实例首先会调用 Directory 的 list()方法 获取 Invoker列表,然后根据配置的 负载均衡策略,从 Invoker列表 中选择一个 Inovker,最后将参数传给选择出的 Invoker实例 进行真正的远程调用。 + +可将上文中出现的 Invoker 简单理解为服务提供者,Directory 的用途是保存 Invoker列表,实现类 RegistryDirectory 是一个动态服务目录,可感知注册中心配置的变化,它所持有的 Inovker 列表会随着注册中心内容的变化而变化。每次变化后,RegistryDirectory 会动态增删 Inovker,并调用 Router 的 route 方法进行路由,过滤掉不符合路由规则的 Invoker。 + +下面我们来看一下 集群模块的项目结构图,结合上文的描述,可以对其有更加深刻的理解。 + +![avatar](/images/Dubbo/dubbo-cluster模块工程结构.png) + +### 集群模块核心API 源码解析 +从上图应该也能看出其核心API在哪个包里。 + +![avatar](/images/Dubbo/com.alibaba.dubbo.rpc.cluster包目录.png) + +各核心接口的源码如下。 +```java +/** + * 集群接口 + */ +@SPI(FailoverCluster.NAME) +public interface Cluster { + + /** + * 将目录调用程序合并到虚拟调用程序。 + * 基于 Directory ,创建 Invoker 对象,实现统一、透明的 Invoker 调用过程 + * + * @param directory Directory 对象 + * @param 泛型 + * @return cluster invoker + * @throws RpcException + */ + @Adaptive + Invoker join(Directory directory) throws RpcException; +} + +/** + * Configurator 接口 + */ +public interface Configurator extends Comparable { + + /** + * 配置规则,生成url + */ + URL getUrl(); + + /** + * 把规则配置到URL中 + */ + URL configure(URL url); + +} + +@SPI +public interface ConfiguratorFactory { + + /** + * 获得 Configurator实例 + */ + @Adaptive("protocol") + Configurator getConfigurator(URL url); + +} + +public interface Directory extends Node { + + /** + * 获得服务类型,例如:com.alibaba.dubbo.demo.DemoService + */ + Class getInterface(); + + /** + * 获得所有服务 Invoker 集合 + */ + List> list(Invocation invocation) throws RpcException; +} + +@SPI(RandomLoadBalance.NAME) +public interface LoadBalance { + + /** + * 从 Invoker 集合中,选择一个合适的 Invoker + */ + @Adaptive("loadbalance") + Invoker select(List> invokers, URL url, Invocation invocation) throws RpcException; +} + +@SPI +public interface Merger { + + /** + * 合并 T 数组,返回合并后的 T 对象 + * + * @param items T 数组 + * @return T 对象 + */ + T merge(T... items); +} + +/** + * 路由规则接口 + */ +public interface Router extends Comparable { + + /** + * 获得路由规则的url + */ + URL getUrl(); + + /** + * 筛选出跟规则匹配的Invoker集合 + * + * @param invokers Invoker 集合 + * @param url refer url + * @param invocation + * @return routed invokers 路由后的 Invoker 集合 + * @throws RpcException + */ + List> route(List> invokers, URL url, Invocation invocation) throws RpcException; +} + +@SPI +public interface RouterFactory { + + /** + * 创建 Router 对象 + */ + @Adaptive("protocol") + Router getRouter(URL url); +} +``` \ No newline at end of file diff --git a/images/Dubbo/com.alibaba.dubbo.rpc.cluster包目录.png b/images/Dubbo/com.alibaba.dubbo.rpc.cluster包目录.png new file mode 100644 index 0000000000000000000000000000000000000000..3dddd66450658b0995722f742e542fa007a4cce0 GIT binary patch literal 12679 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 literal 0 HcmV?d00001 diff --git a/images/Dubbo/dubbo-cluster模块工程结构.png b/images/Dubbo/dubbo-cluster模块工程结构.png new file mode 100644 index 0000000000000000000000000000000000000000..e40c2747b3a29f147755550c91410199ab6f1408 GIT binary patch literal 38398 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 literal 0 HcmV?d00001