AuYuHui
V2EX  ›  问与答

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

  •  
  •   AuYuHui · Mar 2, 2025 · 1998 views
    This topic created in 436 days ago, the information mentioned may be changed or developed.

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

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

    这种有没有坑呢??

    4 replies    2025-03-03 17:39:42 +08:00
    Solix
        1
    Solix  
       Mar 2, 2025
    负载均衡也行,更新的时候路由到其他节点上
    so1n
        2
    so1n  
       Mar 2, 2025   ❤️ 1
    gunicorn 就支持不停服务更新,他再有坑也没有你的 nohup 多...
    dcsuibian
        3
    dcsuibian  
       Mar 3, 2025   ❤️ 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  
       Mar 3, 2025
    借楼问问 docker 怎么弄,先跑一个新的容器?然后等一会 stop 旧的?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5651 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 142ms · UTC 07:31 · PVG 15:31 · LAX 00:31 · JFK 03:31
    ♥ Do have faith in what you're doing.