微服务应用托管至 SAE,如果微服务应用停止前您期望其处理完请求后再停止,您可以使用 SAE 优雅下线功能(即无损下线)。
微服务应用优雅下线方案 SAE 支持 Spring Cloud 和 Dubbo 应用优雅下线,如果您的 Sping Cloud 或者 Dubbo 微服务应用需要进行优雅下线,则需要如下操作:
配置环境变量或者增加 -D 启动参数开启优雅下线功能。 在应用生命周期管理设置中配置 PreStop,SAE 将自动下线本地服务。 配置环境变量开启优雅下线功能 在 SAE 部署环节的高级设置 > 环境变量中添加profiler.micro.service.http.server.enable=true ,如下图所示。您也可以通过 JVM 参数 -D 进行配置。
配置环境变量开启无损下线功能 应用生命周期管理设置中配置 PreStop 在 SAE 部署环节的高级设置 > 应用生命周期管理设置,增加需要处理的下线前请求。例如:curl http://127.0.0.1:54199/offline。
应用生命周期管理 PreStop 中增加配置 SAE 优雅下线功能默认占用 54199 端口,如果此端口和您应用端口产生冲突,那么请在配置环境变量中配置新的端口。
profiler.micro.service.http.server.port = 「您需要设置的端口」,配置如下图所示:
修改默认端口号 配置完成后,在应用生命周期管理设置中同步修改 PreStop 中的端口。
修改PreStop设置中的端口号 结果验证 以下均通过 JAR 包方式创建应用,分别对 Dubbo 和 Spring Cloud 开发框架的应用进行验证。
Dubbo 框架:表现良好,无报错。 Spring Cloud 框架:有少量流量损失,如下图所示。结果验证-Dubbo结果验证--Spring Cloud 经经测试流量损失约 5 秒左右,其原因如下:
应用部署后,Nacos 注册中心服务将下线,需要客户端主动去轮询实例列表,轮训间隔为 10s(非实时),致使下线过程中服务虽然注销仍但会有流量损失。
如果您的服务注册中心使用自建的 Zookeeper 注册中心,则没有该问题。
后续改进 在优雅下线二期,我们将会增强Spring Cloud这一的能力,完善由于注册中心短板造成的流量损失问题。敬请期待。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。