推荐学习书目
› 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 · Mar 10, 2023 · 4477 views
    This topic created in 1336 days ago, the information mentioned may be changed or developed.

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

    19 replies  •  2023-03-24 14:50:22 +08:00
    zoranz
    zoranz
    Mar 10, 2023
    1
    你有啥场景能把进程干爆啊
    idblife
    idblife
    Mar 10, 2023
    2
    supervisord
    paopjian
    paopjian
    Mar 10, 2023
    3
    那就拿 supervisor 保护呗
    echo1937
    echo1937
    Mar 10, 2023
    4
    gunicorn 是 WSGI HTTP Server ,很类似 Java 里的 Tomcat ; Supervisor 则是 A Process Control System ,负责 monitor and control a number of processes ,你的进程挂了会帮你重新拉起来。以上都是他们官方文档摘抄的原文。
    neoblackcap
    neoblackcap
    Mar 10, 2023
    5
    现在而言,配置一下 systemd 就能守护好进程
    LeeReamond
    LeeReamond
    OP
    Mar 10, 2023
    6
    @neoblackcap
    @paopjian
    @idblife 一个疑问,gunicorn 是有子进程的,supervisor 只能监控主进程啊,子进程挂了怎么办
    lgh
    lgh
    Mar 11, 2023 via iPhone
    7
    子进程挂了会重启啊。不过我的是纯 gunicorn ,并没有下挂 uvicorn 。
    ClericPy
    ClericPy
    Mar 11, 2023
    8
    Fastapi 以前自己服务器上就 uvicorn 直接起, 反正更新代码重启下就够了, 不开 --reload

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

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

    不是专业后端, 所以想照抄个当下答案, 如果不是后端是脚本, 就随便重启了
    ykb8121
    ykb8121
    Mar 24, 2023
    19
    systemd
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1277 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 20:02 · PVG 04:02 · LAX 12:02 · JFK 15:02
    ♥ Do have faith in what you're doing.