微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dubbo启停原理解析

本章主要内容
dubbo配置解析;
dubbo服务暴露原理;
dubbo服务消费原理;
dubbo优雅停机解析
1配置解析
目前dubbo框架同时提供了 3种配置方式:XML配置、 注解、 属性文件(properties和ymal)配置, 最常用的还是XML和注解两种方式。
1.1 基于schema设计解析
dubbo 设计之初也考虑到属性最大限度的复用, 因此对schema进行了精心的设计, dubbo schema层级的详细设计如图5.1所示。

1.2 基于XML配置原理解析

1.3基于注解配置原理解析
2服务暴露的实现原理
2.2远程服务的暴露机制
我们先看一下整体RPC的暴露原理

在整体上看, dubbo框架做服务暴露分为两大部分, 第一步将持有的服务实例通过代理转换成Invoker,第二步会把Invoker通过具体的协议(比如dubbo)转换成Exporter,框架做了这层抽象也大大方便了功能扩展。 这里的Invoker可以简单理解成一个真实的服务对象实例, 是dubbo框架实体域, 所有模型都会向它靠拢, 可向它发起invoke调用。 它可能是一个本地的实现, 也可能是一个远程的实现, 还可能是一个集群实现。
2.3本地服务的暴露机制
很多使用dubbo框架的应用可能存在同一个JVM暴露了远程服务, 同时同一个JVM内部又引用了自身服务的情况, dubbo认会把远程
服务用injvm协议再暴露一份, 这样消费方直接消费同一个JVM内部的服务, 避免了跨网络进行远程通信。
3服务消费的实现原理
3.1单注册中心消费原理

在整体上看, dubbo框架做服务消费也分为两大部分, 第一步通过持有远程服务实例生成Invoker,这个Invoker在客户端是核心的远程代理对象。 第二步会把Invoker通过动态代理转换成实现用户接口的动态代理引用。 这里的Invoker承载了网络连接、 服务调用和重试等功能, 在客户端, 它可能是一个远程的实现, 也可能是一个集群实现
3.2多注册中心消费原理
在实际使用过程中, 我们更多遇到的是单注册中心场景, 但是当跨机房消费时, dubbo框架允许同时消费多个机房服务。 dubbo消费机房的服务顺序是按照配置注册中心的顺序决定的, 配置靠前优先消费。
注册中心消费原理比较简单, 每个单独注册中心抽象成一个单独的Invoker,多个注册中心实例最终通过StaticDirectory保存所有的Invoker,最终通过Cluster合并成一个Invoker

4优雅停机原理解析
优雅停机特性是所有RPC框架中非常重要的特性之一, 因为核心业务在服务器中正在执行时突然中断可能会出现严重后果。 接下来我们详细探讨dubbo框架内部实现优雅停机的原理,如图5-7所示。

dubbo中实现的优雅停机机制主要包含6个步骤:
(1)收到kill 9进程退出信号, spring容器会触发容器销毁事件。
(2) provider端会取消注册服务元数据信息。
(3) consumer端会收到最新地址列表(不包含准备停机的地址) 。
(4) dubbo协议会发送readonly事件报文通知consumer服务不可用。
(5) 服务端等待已经执行的任务结束并拒绝新任务执行。
可能读者会有疑问, 既然注册中心已经通知了最新服务列表, 为什么还要再发送readonly报文呢? 这里主要考虑到注册中心推送服务有网络延迟, 以及客户端计算服务列表可能占用一些时间。 dubbo协议发送readonly时间报文时, consumer端会设置响应的provider为不可用状态, 下次负载均衡就不会调用下线的机器。
 

备注:文章参考《深入理解Apache dubbo与实战》,作者:林琳,诣极

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐