Dubbo 总体调用链路框架说明

一、dubbo调用关系整体说明

       1、dubbo各模块角色及模块间调用关系图说明

Dubbo 总体调用链路框架说明_第1张图片

        2、调用关系链路说明

                            Provider: 暴露服务的服务提供方

                                  Protocol 负责提供者和消费者之间协议交互数据 ;

                                 Service 真实的业务服务信息 可以理解成接口 和 实现 ;

                                 Container Dubbo的运行环境;

                            Consumer: 调用远程服务的服务消费方

                               Protocol 负责提供者和消费者之间协议交互数据;

                                Cluster 感知提供者端的列表信息 ;

                                Proxy 可以理解成 提供者的服务调用代理类 由它接管 Consumer中的接口调用逻辑;

 

                            Registry: 注册中心,用于作为服务发现和路由配置等工作,提供者和消费者都会在这里进行注册

                             Monitor: 用于提供者和消费者中的数据统计,比如调用频次,成功失败次数等信息

 

    3、启动和执行流程说明

                         提供者端启动 容器负责把Service信息加载 并通过Protocol 注册到注册中心 ;

                        消费者端启动 通过监听提供者列表来感知提供者信息 并在提供者发生改变时 通过注册中心及时 通知消费端 ;

                         消费方发起 请求 通过Proxy模块利用Cluster模块来选择真实的要发送给的提供者信息交由Consumer中的Protocol 把信息发送给提供者 ;

                         提供者同样需要通过 Protocol 模块来处理消费者的信息 最后由真正的服务提供者 Service 来进行处理;

 

二、dubbo整体调用链路

            1、dubbo整体调用关系链路图

         Dubbo 总体调用链路框架说明_第2张图片

 

            2、dubbo整体调用关系说明

                      2.1.  从上图可以看出, 淡绿色部分代表provider部分,淡蓝色部分表示consumer部分。

                      2.2.  整体调用链路可以分为三大层:业务层(提供接口和实现的地方, 一般由研发人员进行编写)、远程过程调用层(RPC层)、远程数据传输层(Remoting层)。

                      3.3.调用链路说明:

                           A:消费者通过Interface进行方法调用统一交由消费者端的 Proxy 通过ProxyFactory来进行代理对象的创建使用到了 jdk javassist以及java 的代理技术等等。

                           B:接下来对应的请求将转给Filter 进行进一步处理,此时如果对应的SPI(接口扩展点)则进行对应的调用执行。[调用自定义的FIter]

                           C: 继而进入InVoker方法调用,具体可以分为三个部分:

                             a:通过Directory 去配置中新读取信息最终通过list方法获取所有的Invoker引用。

                             b:通过Cluster模块 根据选择的具体路由规则 来选取Invoker列表。

                             c:通过LoadBalance模块 根据负载均衡策略 选择一个具体的Invoker 来处理我们的请求。

                             d:如果调用失败,依据客户端配置的重试机制。再进入到客户端的ReTry 机制。

                             e:继续经过Filter 进行执行功能的前后封装 Invoker 选择具体的执行协议。

                             f: 客户端进行编码和序列化,根据对饮的配置协议(http/dubbo/rmi/hessian),有客户端向服务端发送数据。

                             g:到达Provoder 中的 Server 在这里进行 反编码 和 反序列化的接收数据。

                             h. 使用Exporter选择执行。

                            I. 交给Filter 进行一个提供者端的过滤 到达 Invoker 执行器 。

                            J 通过Invoker 调用接口的具体实现 然后返回。

                         

 

 

三、dubbo总体调用分析(源码层面)

            1、dubbo调用关系链路图

Dubbo 总体调用链路框架说明_第3张图片

             图例说明:

             Dubbo的源码整体设计与调用链路十分相似,只不过在源码设计图中可以看到各个层有更为详细的层次划分。

             图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于 中轴线上的为双方都用到的接口。

             图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可 以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。

             图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。

             图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色 三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。 

          

            2、dubbo分层介绍

                  (一) 业务逻辑层

                             service 业务层 包括我们的业务代码 比如 接口 实现类 直接面向开发者。

                   (二)远程过程调用层(RPC层)

                             config 配置层: 对外提供配置 以ServiceConfig ReferenceConfig 为核心 可以直接初始化配置 类 也可以解析配置文件生成

                             proxy 服务代理层 :无论是生产者 还是消费者 框架都会产生一个代理类 整个过程对上层透明 就是 业务层对远程调用无感

                             registry 注册中心层: 封装服务地址的注册与发现 以服务的URL为中心

                             cluster 路由层 :(集群容错层) 提供了多个提供者的路由和负载均衡 并且它桥接注册中心 以 Invoker为核心

                              monitor 监控层 :RPC调用相关的信息 如 调用次数 成功失败的情况 调用时间等 在这一层完成

                              protocol 远程调用层: 封装RPC调用 无论是服务的暴露 还是 服务的引用 都是在Protocol中作为主 功能入口 负责Invoker的整个生命周期 Dubbo中所有的模型都向Invoker靠拢。

                 (三)Remoting层(Remoting层)

                            exchange信息交换层 封装请求和响应的模式 如把请求由同步 转换成异步;

                            Transport网络传输层 统一网络传输的接口 比如 netty 和 mina 统一为一个网络传输接口 ;

                             serialize数据序列化层负责管理整个框架中的数据传输的序列化 和反序列化;

           

你可能感兴趣的:(Dubbo,调用链路说明,dubbo,rpc,rmi)