dubbo架构图解
2021-06-18 17:25:58 0 举报
dubbo架构
作者其他创作
大纲/内容
Service
为什么要通过代理对象通信?
创建involer
负载均衡,路由到响应的机器
代理层,主要是对服务消费端使用的接口进行代理,把本地调用透明地转换为远程调用
Serialize
Consumer
生成代理
发起接口调用
远程调用层,封装RPC调用逻辑,扩展接口为Protocol
Exchange
容器启动
主要是为了实现接口的透明代理,封装调用细节,让用户可以像调用本地方法一样调用远程方法,同时还可以通过代理实现一些其他的策略,比如:1、调用的负载均衡策略2、调用失败、超时、降级和容错机制3、做一些过滤操作,比如加入缓存、mock数据4、接口调用数据统计
解析配置文件
如果让你实现一个RPC框架怎么设计?首先需要一个服务注册中心,这样consumer和provider才能去注册和订阅服务需要负载均衡的机制来决定consumer如何调用客户端,这其中还当然要包含容错和重试的机制需要通信协议和工具框架,比如通过http或者rmi的协议通信,然后再根据协议选择使用什么框架和工具来进行通信,当然,数据的传输序列化要考虑除了基本的要素之外,像一些监控、配置管理页面、日志是额外的优化考虑因素。
服务暴露的流程
API接口层Service和Config层为API接口层,是为了让Dubbo使用方方便地发布服务和引用服务;对于服务提供方来说需要实现服务接口,然后使用ServiceConfig API来发布该服务;对于服务消费方来说需要使用ReferenceConfig对服务接口进行代理。Dubbo服务发布与引用方可以直接初始化配置类,也可以通过Spring配置自动生成配置类。
路由层,封装多个服务提供者的路由规则、负载均衡、集群容错的实现,并桥接服务注册中心;
通过代理调用接口具体实现
订阅服务
Proxy
服务引用的流程
触发上下文刷新事件
创建代理对象
Register
Protocol
服务暴露之后,客户端就要引用服务,然后才是调用的过程。1.首先客户端根据配置文件信息从注册中心订阅服务2.之后DubboProtocol根据订阅的得到provider地址和接口信息连接到服务端server,开启客户端client,然后创建invoker3.invoker创建完成之后,通过invoker为服务接口生成代理对象,这个代理对象用于远程调用provider,服务的引用就完成了
1.在容器启动的时候,通过ServiceConfig解析标签,创建dubbo标签解析器来解析dubbo的标签,容器创建完成之后,触发ContextRefreshEvent事件回调开始暴露服务2.通过ProxyFactory获取到invoker,invoker包含了需要执行的方法的对象信息和具体的URL地址3.再通过DubboProtocol的实现把包装后的invoker转换成exporter,然后启动服务器server,监听端口4.最后RegistryProtocol保存URL地址和invoker的映射关系,同时注册到服务中心
订阅
Config
服务中心注册
Mointor
分层架构
Transport
业务逻辑层,提供接口和实现
调用次数和时间统计
1.服务启动的时候,provider和consumer根据配置信息,连接到注册中心register,分别向注册中心注册和订阅服务2.register根据服务订阅关系,返回provider信息到consumer,同时consumer会把provider信息缓存到本地。如果信息有变更,consumer会收到来自register的推送3.consumer生成代理对象,同时根据负载均衡策略,选择一台provider,同时定时向monitor记录接口的调用次数和时间信息4.拿到代理对象之后,consumer通过代理对象发起接口调用provider收到请求后对数据进行反序列化,然后通过代理调用具体的接口实现
Cluster
Procotol
配置层,用于初始化配置信息
业务层
大致工作原理
监控层,用来统计RPC调用次数和调用耗时时间
Remoting
信息交换层,封装请求响应模式,同步转异步,扩展接口为Exchanger,对应的扩展实现有HeaderExchanger等。
服务注册中心层,服务提供者启动时会把服务注册到服务注册中心,消费者启动时会去服务注册中心获取服务提供者的地址列表,Registry层主要功能是封装服务地址的注册与发现逻辑
开启server
数据序列化层,提供数据的序列化和反序列化
RPC
创建invoker
Monitor
注册
Registry
Provider
开启client
SPI组件化的分层
转换为exporter
收藏
收藏
0 条评论
下一页