沉默王二

V1

2022/11/07阅读:35主题:自定义主题1

springboot项目,如何做到不停机更新

二哥好,请问已经上线的springboot项目,如何做到不停机更新?中小企业常用的方式有哪些?


这个问题真的挺好的,后面新项目上线后的教程里我们也加了这个章节。今天就先来粗浅的谈一谈。

第一种:Nginx 版本

针对一般的单体应用,通过 Nginx 切换端口可以做到平滑无感知的更新。

大致的步骤是这样的:

1、打一个新的 jar 包,端口号和之前旧的不同。

2、运行新的 jar 包(注意旧的和新的同时在运行)。

3、在 Nginx 配置中把域名转发到新的端口上。

4、确认转发无误后关闭旧的 jar 包。

这主要是利用了 Nginx 的无感知重载配置文件的功能,只需要 reload 一下就可以实现无缝切换。

除此之外,在配置文件里可以添加

server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase=30s

做到优雅停机,参考文章:https://www.cnblogs.com/caoweixiong/p/15650333.html

第二种:K8S

针对比较大型一点的项目,可以利用 K8S 滚动更新,可以参考星球嘉宾 macrozheng 的这篇文章:https://mp.weixin.qq.com/s/dwrxKr4ONfzCLn01QbkpQg

第三种:SpringCloud Gateway实现灰度发布

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

参考文章:https://mp.weixin.qq.com/s/2xbYYs1hh6DZWMCwm5WX3g

分类:

后端

标签:

后端

作者介绍

沉默王二
V1