公司的 web 项目怎么实现热更新,不需要停服就能实现发版

2021-07-06 18:33:42 +08:00
 longmeier90
之前用户少都是公司内部人使用,随便新增一个什么功能,直接就是拉一下代码,重启 web 服务也没问题。最近公司使用的人多了以后,发现这种方式不太适用啦。
我就想有用什么方式改造一下能够实现热更新或者是发版不停服,让用户无感知发版。难道是启动两套服务,做个负载,一个一个的重启?没这样搞过,不知道这种模式会不会有什么坑之类的,或者有什么更好的实现方法没有。
各位大佬给个建议!```
5793 次点击
所在节点    Python
24 条回复
chogath
2021-07-06 18:57:15 +08:00
服务器部署可以用 pm2,集群可以靠谱部署 k8s 做滚动更新或者其他策略
no1xsyzy
2021-07-06 18:57:16 +08:00
我这边有一个就是直接起两个服务做负载均衡分别重启。

当然也有只需要起一个服务并且在重启过程中阻塞保持现有链接的。
gunicorn 的自动重载应当是支持这样操作的,但它可以作为攻击面,小心使用。

更好当然是 k8s 及其轻量替代品,但就是轻量替代品可能都嫌重。
arischow
2021-07-06 19:16:33 +08:00
负载均衡,检查服务健康,注册 /反注册服务,可以用 Ansible 类似的工具做。

我用 Kubernetes
mkdir
2021-07-06 19:34:12 +08:00
来了来了,K8S 替代品 docker swarm,滚动发布,操作简单
DeWjjj
2021-07-06 19:43:38 +08:00
启用两套服务,然后主从数据库做交接。
securityCoding
2021-07-06 19:45:11 +08:00
k8s 正解,现在都是云服务器直接用云服务商的集群就好
netwjx
2021-07-06 21:45:10 +08:00
前置 nginx, 后面放个集群, 至少 2 台
手动切集群
luoqeng
2021-07-06 22:03:50 +08:00
web 都是无状态服务,没啥可热更新的
akira
2021-07-06 22:47:40 +08:00
理论上只需要 3 步 :dodge
1. 启动新服务
2. 新流量切换到新服务
3. 关闭旧服务
myd
2021-07-06 22:55:24 +08:00
数据库的更新呢
kingfalse
2021-07-07 08:03:18 +08:00
rancher 一把梭子 over
finian
2021-07-07 08:58:37 +08:00
搜 graceful shutdown
vueli
2021-07-07 09:12:00 +08:00
web 项目? 是前后端分离的还是怎么样的.
longmeier90
2021-07-07 09:23:57 +08:00
@vueli 嗯,前后端分离的项目
lele88lala
2021-07-07 10:32:56 +08:00
不好意思打扰了,你们都是怎么发帖子的,为什么我发不了呢?
ClericPy
2021-07-07 10:37:55 +08:00
以前 Gunicorn 用的 HUP 信号, 这算热更新么

Reload the configuration
The HUP signal can be used to reload the Gunicorn configuration on the fly. Sending a HUP signal will reload the configuration, start the new worker processes with a new configuration and gracefully shutdown older workers.

现在一直 uvicorn 没找到类似的, 估计也要依赖 Gunicorn worker 来整
hb751968840
2021-07-07 10:43:26 +08:00
要有集群
jorneyr
2021-07-07 11:02:02 +08:00
轮流升级也有坑: 例如计算数值的 Api:
旧版: 1+1 返回 3
新版: 1+1 返回 2
使用负载的时候,新旧版同时存在,同一个接口调用因为负载返回 2 个不同结果。
binbin0915
2021-07-07 11:19:54 +08:00
php 吧 随便替换...
abersheeran
2021-07-07 13:45:41 +08:00
@ClericPy uvicorn 没考虑过做这个功能,gunicorn+uvicorn worker 搭配就行了。

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

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

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

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

© 2021 V2EX