Dubbo体系 分享

Posted 技术伊甸园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo体系 分享相关的知识,希望对你有一定的参考价值。

2018年忙,没有按时更新。今天把2017年会的分享ppt发给大家。

架构发展:技术架构的发展,从头单体:组件-服务-微服务的的渐进过程,由简到繁,由繁到简单。发展历程

dubbo的整体结构实现层级和调用关系如下:

Dubbo体系 分享



Dubbo体系 分享

各层介绍

服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。

配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。

服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。

集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。

监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。

远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。

信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。

网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。

数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool


代码结构:


Dubbo体系 分享

Admin:提供了服务治理的后台管理和配置(web工程)

cluster:提供集群支持,如failover,与负载均衡(脚本负载)等机制并提供扩展点


Common:提供整体使用的工具和整个duboo扩展机制的实现(SPI)扩展机制

Configdubbospring结合的结合点,通过spring的扩展机制来支持dubbo


Filter:提供了 两个过滤器扩展:缓存,数据校验


monitor:统计调用的一些信息,并提供可扩展的机制。通过查找MonitorService在服务中收集

Registry:服务注册。提供服务注册机制和扩展机制。提供的注册机制dubbo默认注册服务(通过注册服务RegistryService),zkredis,组播等注册

Remote:提供底层的服务通讯功能,并提供扩展点。(如netty通讯,http通讯,mima通讯,p2p通讯,zk通讯 等通讯连接通道)


Rpc:提供rpc调用的协议,并提供扩展。协议如:dubbo协议,http协议,injvm协议,memcached协议,rmi协议等


hessian:提供对象序列化和反序列化功能。Java自身带的序列化有缺陷




Dubbo体系 分享

Dubbo体系 分享

1.依据SPI的插件处理机制,

自动对set方法中的变量进行注入 ,详见ExtensionLoader.java


2.形成调用链,将filter加入到调用链中,详见ProtocolFilterWrapper.java


3.进行服务注册;详见RegistryProtocol



Dubbo体系 分享


Dubbo体系 分享

1.协议调用链:由于处理都是通过spi获得协议对象,都会走协议过滤器与生产者相同的


2.协议的订阅,与集群的加入详细见:RegistryProtocol.java


3. Invoker的生成,依据配置生成多种,默认是failover,支持重试,默认三次(详见FailoverClusterInvoker.java)


4。代理对象的生成通过代理生成对应的接口实例,但是调用的都是 Invoker中的 invoke方法(详见ReferenceBeanJavassistProxyFactory








总结:

1.采用的内核型架构思想。很容易实现扩展。架构思想的落地:osgi    spi是一种     轻量级的思想的落地。实现低耦合,高内聚。


2.极其方便的扩展点容易扩展。


3.大尺度的应用装饰模式,自动装载机制很灵活。但是同时也带来代码可读性的问题。


4.Dubbo中对nio框架(netty)的处理值得我们学习


5.建议在一些高并发场景需要序列化对象的操作时,使用hession框架来做,提高速度和空间


6.Rpc调用不方便与其他系统的集成


7.完全是为了高并发场景,整体架构和设计上没有spring-cloud完善。生态上支持也不足。 


以上是关于Dubbo体系 分享的主要内容,如果未能解决你的问题,请参考以下文章

分享一个测试dubbo的小工具

Dubbo最全教学视频分享(共同学习进步)

Dubbo Ecosystem - 从微服务框架到微服务生态

taotao商城dubbo版源码+视频分享

分享dubbo.xsd和idubbo.xsd的可用地址

关于dubbo分享