美文网首页
不停机发布-基于版本的服务自动上下线

不停机发布-基于版本的服务自动上下线

作者: Seymoure | 来源:发表于2024-05-22 09:27 被阅读0次

    1. 概述

    不停机发布, 核心逻辑就是: 新版本上线之后, 再把老版本下线.

    要实现这个逻辑, 基于两个前提: 支持多实例部署, 老版本能自动下线. 支持多实例部署, 就需要端口号自动分配; 老版本自动下线, 一个方法是在新版本启动后sleep一段时间再kill老版本. 这个方法优点是非常简单, 缺点是不实时, sleep的时间不好确定, 无法确定服务是否启动成功. 另一个方法是利用nacos的服务注册表, 让老版本服务自动感知自动下线. 这里选择通过nacos处理.

    流程图如下:

    image.jpeg

    2. 具体项目操作

    2.1 配置端口号自动分配
    image.png
    2.2 代码增加Nacos订阅逻辑
    image.png
    2.3 修改启动参数

    最重要的是增加参数:

    --spring.cloud.nacos.discovery.metadata.myversion=xxx

    这个参数会随服务启动一起注册到nacos的服务列表里. 由于我这里是用jenkins部署, 所以xxx做成参数化$metadataVersion:

    image.png image.png

    服务启动成功后, Nacos服务列表如下:

    image.png

    3. 扩展

    3.1 版本强制降级

    当需要降版本时, 可以在启动参数里增加强制降级标记:

    --spring.cloud.nacos.discovery.metadata.hardown=1

    同时, 在订阅逻辑里增加判断: 如果发现版本低于自己, 且带有hardown标记的服务上线, 也会注销自己并销毁jvm.

    3.2 多机多实例部署 基于jenkins

    目前只实现单机多实例部署, 就是可以指定部署到250服务器, 指定启动x个服务.

    通过参数化多选服务器, 实例启动数量, 可以做到同时指定部署到250,251等多台机器, 进一步提高服务承载能力.

    image.png

    相关文章

      网友评论

          本文标题:不停机发布-基于版本的服务自动上下线

          本文链接:https://www.haomeiwen.com/subject/adhzfjtx.html