6.监控层(Monitor)
RPC调用次数和调用时间监控 , 以Statistics为中心 , 扩展接口为MonitorFactory、Monitor和MonitorService 。
7.远程调用层(Protocol)
封将RPC调用 , 以Invocation和Result为中心 , 扩展接口为Protocol、Invoker和Exporter 。Protocol是服务域 , 它是Invoker暴露和引用的主功能入口 , 它负责Invoker的生命周期管理 。Invoker是实体域 , 它是Dubbo的核心模型 , 其它模型都向它靠扰 , 或转换成它 , 它代表一个可执行体 , 可向它发起invoke调用 , 它有可能是一个本地的实现 , 也可能是一个远程的实现 , 也可能一个集群实现 。
8. 信息交换层(Exchange)
封装请求响应模式 , 同步转异步 , 以Request和Response为中心 , 扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer 。
9.网络传输层(Transport)
抽象mina和netty为统一接口 , 以Message为中心 , 扩展接口为Channel、Transporter、Client、Server和Codec 。
10.数据序列化层(Serialize)
可复用的一些工具 , 扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool 。
Dubbo调用流程

文章插图
对照上面的整体架构图 , 大致分为以下8大步骤:
1、服务提供者启动 , 开启Netty服务 , 创建Zookeeper客户端 , 向注册中心注册服务;
2、服务消费者启动 , 通过Zookeeper向注册中心获取服务提供者列表 , 与服务提供者通过Netty建立长连接;
3、服务消费者通过接口开始远程调用服务 , ProxyFactory通过初始化Proxy对象 , Proxy通过创建动态代理对象;
4、动态代理对象通过invoke方法 , 层层包装生成一个Invoker对象 , 该对象包含了代理对象;
5、Invoker通过路由 , 负载均衡选择了一个最合适的服务提供者 , 在通过加入各种过滤器 , 协议层包装生成一个新的DubboInvoker对象;
6、再通过交换成将DubboInvoker对象包装成一个Reuqest对象 , 该对象通过序列化通过NettyClient传输到服务提供者的NettyServer端;
7、到了服务提供者这边 , 再通过反序列化、协议解密等操作生成一个DubboExporter对象,再层层传递处理,会生成一个服务提供端的Invoker对象;
8、这个Invoker对象会调用本地服务 , 获得结果再通过层层回调返回到服务消费者 , 服务消费者拿到结果后 , 再解析获得最终结果 。
以上 , 是关于 Dubbo 原理机制及架构设计等的详细解析 。
本文对理解、掌握和使用 Dubbo 有所帮助 , 可以作为 Dubbo 的参考学习资料 , 建议收藏、时常温顾 。
如果觉得有用 , 请点击【 推荐 】支持下 , 谢谢~
作者简介陈睿 | mikechen , 10年+大厂架构经验,「mikechen 的互联网架构」系列文章作者 , 专注互联网架构技术 。
阅读「mikechen 的互联网架构」的更多技术文章合集:
Java并发 | JVM | MySQL | Spring | Redis | 分布式 | 高并发
【非常全面 Dubbo 原理和机制详解】
经验总结扩展阅读
- 天蝎座女2023年的全年运势 事业非常理想且健康表现不错
- 全面屏电视是什么意思 海信E72A全面屏电视怎么样呢
- 海信80吋L5激光电视怎么样 全面评测给你
- 暴风激光电视全面评测 给你巨幕电影的体验
- 创维4k和海信4k电视哪个好 全面的分析
- 抖音小店平台抽佣金多少
- 小米Civi全面评测_小米Civi真机体验
- Dubbo 03: 直连式 + 接口工程
- Dubbo2.7详解
- 把感情看得非常重的四大星座
