V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AuYuHui
V2EX  ›  问与答

fastapi 如何优雅的不停服务更新

  •  
  •   AuYuHui · 3 天前 · 969 次点击

    各位大佬,现在项目是使用 nohup 来启动的,每次更新时 都要拉新代码,重启。

    问了 GPT 可以用 Gunicorn 方式不停服务更新

    这种有没有坑呢??

    4 条回复    2025-03-03 17:39:42 +08:00
    gaobh
        1
    gaobh  
       3 天前
    负载均衡也行,更新的时候路由到其他节点上
    so1n
        2
    so1n  
       3 天前   ❤️ 1
    gunicorn 就支持不停服务更新,他再有坑也没有你的 nohup 多...
    dcsuibian
        3
    dcsuibian  
       3 天前   ❤️ 2
    Nginx+蓝绿部署就行了
    简单来说就是你原来的进程不停,新起一个进程,更新 Nginx 配置文件,nginx -s reload 就行。如果当前有请求正在处理的话,Nginx 会维持旧的连接,但是会把新的请求导向新的地方。
    具体来说:现在旧的服务的端口是 9527 ,新的是 9528 。在/etc/nginx/conf.d/中有两个文件,9527.conf 和 9528.conf.bak ,分别导向两个服务。只要重命名一下文件,然后 reload nginx 就行。下次再需要更新就反过来。

    其实基本原理都差不多,k8s 也是类似的做法。

    问题也是有的,首先有状态服务(数据库)还是不能随便变的。
    其次就是长连接还是有问题,比如 WebSocket 。所以最好不要一更新完就把旧的给 kill 了。
    w292614191
        4
    w292614191  
       2 天前
    借楼问问 docker 怎么弄,先跑一个新的容器?然后等一会 stop 旧的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:29 · PVG 17:29 · LAX 01:29 · JFK 04:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.