dubbo 优雅停机

1,045 阅读1分钟

为什么要优雅停机?

因为服务上线的时候,需要先停止服务,然后再上线新的服务,这里有一个停止 启动的过程。

但是,问题是,怎么确保停止服务的时候,确保正在处理的请求,处理完毕,即停止服务的时候,不影响正在处理的请求?

解决方法

dubbo有实现。默认就是开启优雅停机的配置。

事实上,rpc框架,tomcat容器,都有实现优雅停机功能。

流程

主要有以下几个步骤
1.首先,下线服务 //这个是从注册中心下线

2.停止处理新的请求 //告诉所有已经连接的客户端,服务提供者已经停机,不能接受新的请求,即不能写数据到服务提供者,只能从服务提供者读数据(即正在处理的请求,可以继续读返回数据)

3.等待一段时间,比如十秒级别(通常几十秒),来处理正在处理的请求 //注意:不能保证所有的正在处理请求,都100%执行完成。只要配置的等待时间到了,就会停机。

原理

主要是基于钩子。就是jvm退出之前,处理已经存在的请求。

tomcat的优雅关闭,也是基于钩子。

参考

dubbo.apache.org/zh-cn/blog/…

juejin.cn/post/684490…