请问你们是如何实现服务不中断的代码发布更新的

2023-03-10 15:38:38 +08:00
 brader
目前我知道的一个自动化的方式就是 k8s 的滚动更新。

大家实际生产中,应该不是每个人都有使用 k8s 吧?
像你们 java 、go 这些语言,发布新版本的时候,如果不用 k8s ,你们是怎么实现平滑更新过度的,还是直接暴力重启?
5393 次点击
所在节点    程序员
59 条回复
lincanbin
2023-03-10 15:40:42 +08:00
从名字服务里摘掉发布节点,然后等一会儿这个节点就没流量了,就可以发布了。
brader
2023-03-10 15:44:36 +08:00
@lincanbin 额,有点没明白,你用的是代码框架,或者代码自实现的平滑重启效果吗
seers
2023-03-10 15:45:03 +08:00
方法多了去了,Nginx 调整下集群权重
LeeReamond
2023-03-10 15:45:03 +08:00
@lincanbin 名字服务,nameserver ?现代汉语属实是让人摸不到头脑了
moshiyeap100
2023-03-10 15:45:32 +08:00
比如一个服务有 3 个实例。

step1: 从注册中心下线 A ,A 没流量了开始更新 A

更新后,观察 A 是否正常。 如果正常继续更新下一个服务,不正常就下线回滚。


我们就是这么原始。
ZSeptember
2023-03-10 15:47:08 +08:00
首先看你有几个实例,至少两个实例才能做到
lincanbin
2023-03-10 15:49:33 +08:00
@LeeReamond 也可以叫注册中心吧,反正叫法挺多的,就是维护一个服务的实例列表的一个服务
tmtstudio
2023-03-10 15:50:38 +08:00
php 无所畏惧🤗
SanYuan
2023-03-10 15:50:40 +08:00
多套环境,A\B 互为蓝绿环境,用户全拉到 A 然后发布 B 完事用户切到 B
LeegoYih
2023-03-10 15:51:49 +08:00
新实例启动完成后,Nginx 配置改为新实例的地址 reload 配置,然后销毁旧实例
lincanbin
2023-03-10 15:52:47 +08:00
除了名字服务里来剔除发布节点流量的方法外,reuseport 也是一个很常见的方式。
libook
2023-03-10 15:53:11 +08:00
一般正式环境业务不会但节点跑的,多节点就需要负载均衡,那么只需要手动调整负载均衡权重,让一台机器没有入站流量了,再将这台停机升级,恢复流量再处理下一台。

可以用脚本或程序自动化,持续部署方案比 k8s 出来早很多年就很成熟了。
daoyu
2023-03-10 15:53:52 +08:00
蓝绿部署、金丝雀部署
photon006
2023-03-10 15:55:08 +08:00
node.js ,小脚本用 pm2 reload ,跟 nginx reload or kill -HUP 类似

常规项目用 docker service ,参考:

https://linuxhandbook.com/update-docker-container-zero-downtime
https://www.tines.com/blog/simple-zero-downtime-deploys-with-nginx-and-docker-compose
brader
2023-03-10 16:04:09 +08:00
@seers 这种很难实现自动化吧?
brader
2023-03-10 16:05:34 +08:00
@moshiyeap100 你们有弄了注册中心,还是蛮复杂的,然后你说的过程,你们是实现了自动化构建发布过程,还是手动更新啊
brader
2023-03-10 16:06:07 +08:00
@ZSeptember 多个实例可以很容易实现自动化更新吗?
brader
2023-03-10 16:06:40 +08:00
@tmtstudio 确实 PHP 更新比较方便,就简单场景,我们直接 git pull 也很少出问题
brader
2023-03-10 16:07:27 +08:00
@SanYuan 就是这个切的过程,不用 k8s 的话,你们实现自动化的架构是怎么实现的?还是单纯手动更新的
brader
2023-03-10 16:09:02 +08:00
@libook 好像网上比较少看到这种架构的教程或者脚本实现啊,自己实现的话,感觉又不那么容易

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/922911

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX