Dubbo体系 分享
Posted 技术伊甸园
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo体系 分享相关的知识,希望对你有一定的参考价值。
2018年忙,没有按时更新。今天把2017年会的分享ppt发给大家。
架构发展:技术架构的发展,从头单体:组件-服务-微服务的的渐进过程,由简到繁,由繁到简单。发展历程
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
代码结构:
Admin:提供了服务治理的后台管理和配置(web工程)
cluster:提供集群支持,如failover,与负载均衡(脚本负载)等机制并提供扩展点
Common:提供整体使用的工具和整个duboo扩展机制的实现(SPI)扩展机制
Config:dubbo与spring结合的结合点,通过spring的扩展机制来支持dubbo
Filter:提供了 两个过滤器扩展:缓存,数据校验
monitor:统计调用的一些信息,并提供可扩展的机制。通过查找MonitorService在服务中收集
Registry:服务注册。提供服务注册机制和扩展机制。提供的注册机制dubbo默认注册服务(通过注册服务RegistryService),zk,redis,组播等注册
Remote:提供底层的服务通讯功能,并提供扩展点。(如netty通讯,http通讯,mima通讯,p2p通讯,zk通讯 等通讯连接通道)
Rpc:提供rpc调用的协议,并提供扩展。协议如:dubbo协议,http协议,injvm协议,memcached协议,rmi协议等
hessian:提供对象序列化和反序列化功能。Java自身带的序列化有缺陷
1.依据SPI的插件处理机制,
自动对set方法中的变量进行注入 ,详见ExtensionLoader.java
2.形成调用链,将filter加入到调用链中,详见ProtocolFilterWrapper.java
3.进行服务注册;详见RegistryProtocol
1.协议调用链:由于处理都是通过spi获得协议对象,都会走协议过滤器与生产者相同的
2.协议的订阅,与集群的加入详细见:RegistryProtocol.java。
3. Invoker的生成,依据配置生成多种,默认是failover,支持重试,默认三次(详见FailoverClusterInvoker.java)
4。代理对象的生成通过代理生成对应的接口实例,但是调用的都是 Invoker中的 invoke方法(详见:ReferenceBean与JavassistProxyFactory
总结:
1.采用的内核型架构思想。很容易实现扩展。架构思想的落地:osgi, spi是一种 轻量级的思想的落地。实现低耦合,高内聚。
2.极其方便的扩展点容易扩展。
3.大尺度的应用装饰模式,自动装载机制很灵活。但是同时也带来代码可读性的问题。
4.Dubbo中对nio框架(netty)的处理值得我们学习
5.建议在一些高并发场景需要序列化对象的操作时,使用hession框架来做,提高速度和空间
6.Rpc调用不方便与其他系统的集成
7.完全是为了高并发场景,整体架构和设计上没有spring-cloud完善。生态上支持也不足。
以上是关于Dubbo体系 分享的主要内容,如果未能解决你的问题,请参考以下文章