dubbo链路图以及源码整体设计

下图标记注释:
淡蓝色:consumer范围
淡绿色:provider
中轴线:服务提供者和消费者公用的接口
紫色:继承和实现
蓝色虚线:初始化
红色:调用链路情况
黑色:依赖

dubbo链路情况

dubbo调用链路情况

dubbo源码流程

dubbo源码流程图

dubbo执行流程(看图说话)
  1. Start–>Interface(在中轴线上,生产者和消费者都需要使用)–>消费端的Proxy(Proxy的创建需要ProxyFactory.getProxy())使用jdk和javassist代理–>
  2. (中间可以加自定义filter过滤器)
  3. Invoker调用list方法—》调用Directory中的list–》利用注册中心Directory(RegisterDirectory、RegistryProtocol)最终通过list方法拿到注册中心中的所有的invoker),然后返回给Directory–>Directory在通过路由route方法调用Router中的规则选取Invoker,然后调用loadBalance,然后loadBalance根据负载均衡策略Cluster模块,选出调用的Invoker后发起调用。
  4. 经过Filter过滤器,通过具体的协议,拿到一个Invoker对象(包括重试阶段)
  5. 拿到Invoker,后需要经过DubboInvoker—》ExchangeClient–》Client
  6. Client调用Codec中的encode–》Serialization中的serialize进行序列化
  7. 服务端Server通过Codec中的decode–》Serialization中的deSerialize进行反序列化
  8. Server调用received方法传给ChannelHandler然后再经过DubboHandler,再经过DubboExporter,最后传给Exporter。
  9. Export选择一个执行器,中间通过Invoke过滤器,到达Invoker(Invoker也是ProxyFactory的getInvoker创建的代理),最终调用到实现类Impl
dubbo分层结构(10层,参考图片)
  1. Bussiness(业务逻辑层)
    • service层 包括业务代码,如接口,实现类,直接面向开发者
  2. RPC(远程过程调用层)
    • Config:配置层 。对外提供配置,以ServiceConfig和ReferenceConfig为核心,可以直接初始化配置类,也可以解析配置文件生成
    • Proxy:服务代理层 无论是生产者Proxy还是消费者Invoker,框架都会产生一个代理类,整个过程对上层透明,就是业务层对远程调用无感
    • Registry:注册中心层 封装服务地址的注册与发现,以服务URL为中心
    • Cluster:路由层(集群容错层) 提供了多个提供者的路由和负载均衡,并且桥接注册中心,以Invoker为核心
    • Monitor:监控层,RPC调用相关信息,如调用次数,成功失败情况,调用时间等信息在这一层完成
    • Protocol:远程调用层,封装RPC调用,无论是服务的暴漏还是引用,都是在Protocol中作为主功能入口,负责Invoker的整个生命周期,Dubbo中所有的模型都想Invoker靠拢
  3. Remoting(远程数据传输层)
    • exchange:信息交换层 封装请求和响应的模式,如把请求由同步转化成异步
    • transport:网络传输层 统一网络传输的接口,比如netty、mina统一为一个网络传输接口
    • serialize:数据序列化层 负责管理整个框架中的数据传输的序列化和反序列化

结束语

文章由于是自己总结,导致有些地方用词不够严谨,希望大家多多见谅,多多指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值