开始写点技术博客,来巩固下自己的知识,首先从dubbo开始。第一天。
众所周知,Dubbo是Ali发布的开源的分布式服务框架,实际上说dubbo就是对RPC的一种封装,他最大的特点是按照分层的方式来架构,使用这种方式可以使各服务应用层之间的耦合最大程度的解耦。从服务模型的角度来看,dubbo采用的一种非常简单的模式,只有消费方(Consumer)、提供方(provider)两个角色。
![](https://img.haomeiwen.com/i12207959/4e41736b0c46ed28.png)
dubbo框架设计一共划分了了10个层,最上面的service层使留给实际想要使用dubbo开发分布式服务的开发者实现业务逻辑的接口层。上图左边淡蓝色背景的为消费方使用的接口,右边淡绿色背景为服务提供的接口,位于中轴线上的为双方都用到的接口。
分析下框架分层架构中,各层的设计要点:
1.服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
2.配置层(Config):对外配置的接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过Spring解析配置类生成配置类。我待得项目组采用的是后者。通过解析*.-dubbo-customer、*-dubbo-provider.xml 配置对应的service 接口 和dubbo的配置。
3.服务代理层(proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口的ProxyFactory。
4.服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务的注册中心,测试服务提供方直接暴露服务。
5.集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Disectory、Router和LoadBalance。将多个服务提供方组合为一个实现对服务消费方来透明,只需要与一个服务同方进行交互。
6.监视层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Moinitor和MonitorService。
7.远程调用层(Proctocol):封装RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter.Protocol是服务域,他是Invoker暴露和引用的主入口,他负责Invoker的生命周期管理,Invoker是实体域,它是dubbo的核心模型,其他模型都向它靠拢,或转换成它,它代表一个执行体,可向它发起Invoke调用,它有可能是一种本地的实现,也有可能是一种远程的实现,也有可能一个集群实现
8.信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。例如public Response xxx(@param){return reponse}
9.网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transportput和ThreadPool。
10.数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、ObjectInput、ObjectOutPut和ThreadPool。
根据官方提供的,对于上述各层之间关系的描述,如下所示:
1.在RPC中,Proctocol是核心层,也就是只要有Protocol+Invoker+Exporter就可以完成非透明的RPC调用,然后在Invoker的主过程上Filter拦截点。
2.图中的Consumer和provider是抽象概念,只是想
网友评论