1
youngs 2019-11-20 12:19:53 +08:00
126 天前就已经是萌新了,现在还叫萌新
|
3
scukmh 2019-11-20 12:21:16 +08:00
用 ha 呀。
|
5
monsterxx03 2019-11-20 12:25:03 +08:00
gunicorn, kill -HUP
|
6
eteryao OP @monsterxx03 我们部署没有使用 gunicorn 这点我忘说了 我们是用 docker 进行部署的。
|
7
feiniu 2019-11-20 12:39:11 +08:00 via iPhone 2
凌晨三点更新,
我乱说的 |
8
Vegetable 2019-11-20 12:54:11 +08:00
你用什么部署不重要,这个还是要看你用了什么 wsgi 程序,gunicorn or uwsgi?
https://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html 读一下这个看看, 还有 gunicorn 的文档 https://docs.gunicorn.org/en/stable/faq.html#how-do-i-reload-my-application-in-gunicorn ,这个我不确定是不是会等待程序结束 一个比较蠢的办法时修改 nginx 配置,重新启动一个端口提供变更后的服务,让后 nginx -s reload,nginx 会处理好连接 |
10
XiaoxiaoPu 2019-11-20 13:08:42 +08:00
前面用 nginx 等类似的负载均衡,后面接至少两个 flask 实例,每次部署时,先在负载均衡上摘掉一个,等待活跃请求完成后,重启这个实例,重启完成后再把这个实例加回去,然后再用同样的方式操作下一个实例。
|
11
eteryao OP |
12
andylsr 2019-11-20 13:20:21 +08:00 via Android
楼上凌晨 3 点停机更新可能是最佳方案😂
|
14
8kFT2l6aoU9566Bg 2019-11-20 13:26:45 +08:00 via Android
@eteryao 生产环境就不是这样部署的,gunicorn 跟 uwsgi 是必须的吧,无论你是否用 Docker。提前通知用户,凌晨闲时更新即可,为啥非要“优雅”关闭?
|
15
f1ren2es 2019-11-20 13:29:43 +08:00
@eteryao 用 docker 实现类似 uwsgi 里的 gracefule reload 就好了,多个 docker 依次重启
|
16
Cat73 2019-11-20 13:41:14 +08:00
拿 Nginx 处理下就好
|
17
Vegetable 2019-11-20 13:41:25 +08:00
@eteryao #11 你这等于时用了 flask 自带的服务器,这个应该只在开发环境使用,性能比较差也不够稳定,用这个服务器的话,你还真就只能用两个 docker 实例+两个内部端口+nginx 去做了,因为这个服务器本身没有提供这个 zero downtime 的功能.
|
18
cz5424 2019-11-20 13:55:08 +08:00 via iPhone
不建议使用 flask 自带的,楼上已经给了很多方案了,比如 gunicorn 热重启
|
19
cz5424 2019-11-20 13:58:15 +08:00 via iPhone
我这边是使用 Gunicorn 的,重启命令
docker exec -it 容器名字 kill -s HUP 1 |
23
runtu2019 2019-11-20 16:28:22 +08:00
shell 脚本几行搞定的事情,监听服务端口的连接情况,端口没有 tcp 连接执行重启,用 crontab 重复执行脚本即可
|
24
fml87 2019-11-20 16:41:46 +08:00
就算 uwsgi/gunicorn/nginx 可以安全热重启,通常也无法说服领导在生产环境热重启,所以半夜停服重启基本是方案
|
25
NeinChn 2019-11-21 00:39:36 +08:00
|
26
evlos 2019-11-21 20:45:21 +08:00 via iPhone
Zero downtime deployment
|
27
petelin 2019-11-25 10:50:25 +08:00 via iPhone
先摘机器 然后看机器上的请求什么时候都处理完了
后一点 python 做及其难 go 就简单多了 所以基本所有的 go 服务都自带 gracefulshutdown。python 里有这词吗? |