Fastapi web 应用生产级守护部署的方式? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
LeeReamond
V2EX    Python

Fastapi web 应用生产级守护部署的方式?

  •  
  •   LeeReamond 2023-03-10 14:05:54 +08:00 3394 次点击
    这是一个创建于 953 天前的主题,其中的信息可能已经有所发展或是发生改变。

    多进程 fastapi ,一直用的是跑分网的部署方法,用 gunicorn 挂 uvicorn worker 启动。倒是没出过什么问题,因为我们以前压力一直不大,未来有点预期要上压力,我想起来这个好像有个坑来着。因为印象里以前看哪个大佬提过一嘴说 gunicorn 实际上只能启动但是进程挂了之后连重拉起功能都没有的,也不知道是不是属实。。。

    19 条回复    2023-03-24 14:50:22 +08:00
    zoranz
        1
    zoranz  
       2023-03-10 17:47:54 +08:00
    你有啥场景能把进程干爆啊
    idblife
        2
    idblife  
       2023-03-10 17:54:34 +08:00
    supervisord
    paopjian
        3
    paopjian  
       2023-03-10 19:29:54 +08:00
    那就拿 supervisor 保护呗
    neoblackcap
        5
    neoblackcap  
       2023-03-10 20:53:52 +08:00
    现在而言,配置一下 systemd 就能守护好进程
    LeeReamond
        6
    LeeReamond  
    OP
       2023-03-10 20:56:56 +08:00
    @neoblackcap
    @paopjian
    @idblife 一个疑问,gunicorn 是有子进程的,supervisor 只能监控主进程啊,子进程挂了怎么办
    lgh
        7
    lgh  
       2023-03-11 08:21:44 +08:00 via iPhone
    子进程挂了会重启啊。不过我的是纯 gunicorn ,并没有下挂 uvicorn 。
    ClericPy
        8
    ClericPy  
       2023-03-11 10:07:08 +08:00
    Fastapi 以前自己服务器上就 uvicorn 直接起, 反正更新代码重启下就够了, 不开 --reload

    公司服务器上也是 gunicorn + uvicorn, 主要用到 gunicorn 那个 HUP 信号无中断的热重启, 守护 systemd 就够了, supervisord 这么多年了也不知道当初那些小 bug 好了没有

    现在在考虑 docker 那边怎么无中断热重启, 想丢 K8S 里面, 之前想的是 nginx 帮我转发多个端口的, 重启的时候一个个重启自动切流量, 不知道有什么更好办法没有. docker 里面走 gunicorn 就算接到 HUP, 但是代码是跟镜像走的...
    julyclyde
        9
    julyclyde  
       2023-03-11 11:18:55 +08:00
    systemd 是唯一正确答案
    supervisord 自己由谁守护还是个问题呢
    SKYNE
        10
    SKYNE  
       2023-03-11 13:48:09 +08:00
    容器化丢 k8s 里
    LeeReamond
        11
    LeeReamond  
    OP
       2023-03-11 16:52:41 +08:00
    @ClericPy 可能确实容器化+nginx 分流是比较合理的方案。寻思了一下,似乎直接 gunicorn 实现多节点也只有一行代码启动的优势,毕竟通信都靠中间服务了,可能细研究连方便也未必方便。
    ClericPy
        12
    ClericPy  
       2023-03-11 21:04:33 +08:00
    @LeeReamond nginx 我也是没办法, 但凡组里有个运维就研究研究 Istio 什么的了. 我就想知道个当前的版本答案, gunicorn 这套五年前就不流行了
    LeeReamond
        13
    LeeReamond  
    OP
       2023-03-11 21:41:32 +08:00
    @ClericPy 哈哈,老哥版本答案总结到位
    fcfangcc
        14
    fcfangcc  
       2023-03-13 17:06:14 +08:00
    gunicorn 子进程挂了是会自动拉起的,不用担心
    luzihang
        15
    luzihang  
       2023-03-14 09:07:11 +08:00
    pm2 也可以用用,比 supervisord 好看,好用
    ClericPy
        16
    ClericPy  
       2023-03-14 18:54:50 +08:00
    @LeeReamond 大哥, 我是来等新版本云原生的答案的...
    byaiu
        17
    byaiu  
       2023-03-16 17:40:25 +08:00
    @ClericPy 求问当下流行什么?直接 systemd 接管?
    ClericPy
        18
    ClericPy  
       2023-03-16 18:46:47 +08:00
    @byaiu
    流行云原生吧, 主要想抄个版本答案, 能达到和以前那套一样流量不丢失的就行. 我也求问啊... 现在想到的就是多实例切流量, 不然默认的实例重启会弄丢当前连接

    不是专业后端, 所以想照抄个当下答案, 如果不是后端是脚本, 就随便重启了
    ykb8121
        19
    ykb8121  
       2023-03-24 14:50:22 +08:00
    systemd
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     887 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:29 PVG 06:29 LAX 15:29 JFK 18:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86