Dubbo优雅停机原理

关注可以查看更多粉丝专享blog~

- 收到kill -9进程退出信号,Spring容器会触发容器销毁事件。
- provider端会取消注册服务元数据信息。
- consumer端会收到最新的地址列表(不包含准备停机的地址)。
- Dubbo协议会发送readonly事件报文通知consumer服务不可用。
- 服务端等待已经执行的任务结束并拒绝新任务执行。
- 最后provider与consumer断开TCP连接。
注册中心已经通知了最新服务列表,provider还要发送readonly报文的原因是,注册中心推送服务可能会由网络延迟,客户端接收和计算服务列表可能占用一些时间。Dubbo协议发送readonly报文时,consumer端会设置响应的provider为不可用,下次负载均衡的时候就不会调用下线的机器了。
Dubbo2.6.3以后修复了优雅停机的一些bug,之前版本中没有做到完全的优雅停机的原因是,Spring和Dubbo都注册了JVM停止的钩子,这种场景下两个线程并发执行的时候可能引用一些销毁的资源,比如Dubbo正在执行的任务需要引用Spring中的Bean,但这时Spring钩子函数已经关闭了Spring上下文,导致访问任何Spring资源都会报错。
相关文章:

当接收到kill -9信号,Spring容器销毁事件启动,Dubbo provider取消服务注册,consumer获取更新的服务列表并标记不可用。服务端等待现有任务完成并拒绝新任务,最后断开TCP连接。Dubbo 2.6.3修复了优雅停机的某些问题,避免了Spring和Dubbo钩子并发执行时可能导致的资源访问错误。
最低0.47元/天 解锁文章
4480

被折叠的 条评论
为什么被折叠?



