1. 概述
不停机发布, 核心逻辑就是: 新版本上线之后, 再把老版本下线.
要实现这个逻辑, 基于两个前提: 支持多实例部署, 老版本能自动下线. 支持多实例部署, 就需要端口号自动分配; 老版本自动下线, 一个方法是在新版本启动后sleep一段时间再kill老版本. 这个方法优点是非常简单, 缺点是不实时, sleep的时间不好确定, 无法确定服务是否启动成功. 另一个方法是利用nacos的服务注册表, 让老版本服务自动感知自动下线. 这里选择通过nacos处理.
流程图如下:
image.jpeg2. 具体项目操作
2.1 配置端口号自动分配
image.png2.2 代码增加Nacos订阅逻辑
image.png2.3 修改启动参数
最重要的是增加参数:
--spring.cloud.nacos.discovery.metadata.myversion=xxx
这个参数会随服务启动一起注册到nacos的服务列表里. 由于我这里是用jenkins部署, 所以xxx做成参数化$metadataVersion:
image.png image.png服务启动成功后, Nacos服务列表如下:
image.png3. 扩展
3.1 版本强制降级
当需要降版本时, 可以在启动参数里增加强制降级标记:
--spring.cloud.nacos.discovery.metadata.hardown=1
同时, 在订阅逻辑里增加判断: 如果发现版本低于自己, 且带有hardown标记的服务上线, 也会注销自己并销毁jvm.
3.2 多机多实例部署 基于jenkins
目前只实现单机多实例部署, 就是可以指定部署到250服务器, 指定启动x个服务.
通过参数化多选服务器, 实例启动数量, 可以做到同时指定部署到250,251等多台机器, 进一步提高服务承载能力.
image.png
网友评论