dubbo源码实践-总结

10 篇文章 0 订阅

自己大概花了一个月的时间,断断续续的看了一遍dubbo源码,之前的文章从实践出发搭建了dubbo各层的例子!

Dubbo源码的学习也暂时告一段落。这篇就谈谈自己对dubbo源码学习个人感受!

1 dubbo是什么?

dubbo是一个RPC框架,用来实现程序间通信的。

可以看看官方的入门文档:https://cn.dubbo.apache.org/zh/docsv2.7/user/preface/

2 dubbo架构图

架构图原地址:https://cn.dubbo.apache.org/zh/docsv2.7/dev/design/

图中的每个类都要知道干什么的,解决什么问题的。

3 学到了什么?

3.1 dubbo基本设计原则

采用 Microkernel + Plugin 模式,Microkernel 只负责组装 Plugin,Dubbo 自身的功能也是通过扩展点实现的,也就是 Dubbo 的所有功能点都可被用户自定义扩展所替换。

采用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息。

“Microkernel + Plugin” 模式把流程和具体的实现细节分开,dubbo的整体流程相对固定,实现细节确是多样的。如:底层的通信框架可以用netty也可以用mina。这里其实就是指SPI。

“URL 作为配置信息的统一格式”这个比较奇怪,URL设置参数时就像一个MAP,之前的观念对MAP作为方法的入参比较排斥,一直认为MAP类型不应做入参。看了观念要改改了。

3.2 dubbo架构分层

在dubbo架构图中可以看出,dubbo把自己内部分了好多层,每个层都抽象了一些功能。之前做业务比较喜欢分模块,以后也要想到分层(以前不想的原因可能是Spring的应用,默认就3、4层)。

之前看dubbo源码,直接看服务的发布流程和调用流程比较懵,但是当按层搭建了实例并且分析了每层完成的任务后,再看服务的发布流程和调用流程就比较轻松了。

想了解流程可以参考官方说明文档:

服务导出: https://cn.dubbo.apache.org/zh/docsv2.7/dev/source/export-service/

服务引用: https://cn.dubbo.apache.org/zh/docsv2.7/dev/source/refer-service/

3.3 Invoker接口抽象

Invoker接口抽象的比较惊艳,消费端用Invoker封装了远程调用、集群调用(路由、负载均衡),服务提供端用Invoker封装了业务服务的调用,同时还提供了Invoker的异步转同步实现类(参见AsyncToSyncInvoker类)。

Invoker还支持互相嵌套。

Filter接口也有可以看看,也实现了对Invoker的包装,类似web应用中的Filter。

3.4 jdk动态代理、反射和javassist的学习

dubbo在消费端使用了jdk动态代理或者javassist来生成接口的实现类,服务提供端使用反射或者javassist来完成对相应业务服务类的调用。可以参考JdkProxyFactory、JavassistProxyFactory。

3.5 CompletableFuture类

dubbo的异步使用了 jdk1.8 提供的CompletableFuture类,需要了解和使用一下。

3.6 dubbo中的时间轮和线程池实现

dubbo中的时间轮和线程池实现,有空需要了解一下。

4 和面试官怎么聊?

1)Microkernel + Plugin 模式(SPI) + URL参数。

2)架构分层,每一层的功能。架构图要牢记。

3)dubbo的各个功能需要看一看:

A. 推荐用法 https://cn.dubbo.apache.org/zh/docsv2.7/user/recommend/

B. 参考手册 https://cn.dubbo.apache.org/zh/docsv2.7/user/references/

4)在结合项目聊聊

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值