推荐学习书目
› 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
cloudyplain
V2EX  ›  Python

Python WSGI servers 高性能选型

  •  
  •   cloudyplain · Mar 17, 2017 · 7561 views
    This topic created in 3520 days ago, the information mentioned may be changed or developed.

    现在系统使用的是 nginx+uwsgi(开启 gevent)+bottle(gevent monkey patch),测试场景(读 redis), qps 4k 左右,请问还有性能更高、稳定的生产级别架构吗?谢谢!

    18 replies  •  2017-03-19 11:02:29 +08:00
    yanzixuan
    yanzixuan
    Mar 17, 2017
    1
    我用 flask ,一直配合 gunicorn 的 eventlet 选项使用。貌似没毛病。
    est
    est
    Mar 17, 2017
    2
    先测 redis 。
    freestyle
    freestyle
    Mar 17, 2017
    3
    mark 你的 nginx 多少个 worker? upstream? uwsgi 多少个 processes?
    zhuangzhuang1988
    zhuangzhuang1988
    Mar 17, 2017
    4
    Cherrypy 的 wsgi
    zhuangzhuang1988
    zhuangzhuang1988
    Mar 17, 2017
    5
    你都用 Bottle 了 可以看下这个
    http://bottlepy.org/docs/dev/deployment.html#switching-the-server-backend 列举了好多 wsgi server
    cloudyplain
    cloudyplain
    OP
    Mar 17, 2017
    6
    @freestyle nginx 16 worker,upstream 2, uwsgi 8 processes, gevent 800,没做优化,但是使用 node 来测试,性能要高出很多, 1w+ qps 。
    baocaixiong
    baocaixiong
    Mar 17, 2017
    7
    gunicorn+meinheld
    cloudyplain
    cloudyplain
    OP
    Mar 17, 2017
    8
    @baocaixiong qps 能到多少?我们这个产品是 n 年前的了,想知道现在业界主流的玩法。
    wuxqing
    wuxqing
    Mar 17, 2017
    9
    性能 uwsgi 算是比较高的,但是我还是建议 gunicorn ,因为我们团队碰到一些问题:
    wuxqing
    wuxqing
    Mar 17, 2017❤️2
    10
    性能 uwsgi 算是比较高的,但是我还是建议 gunicorn ,因为我们团队碰到一些问题:
    使用 uwsgi ,通过 zmq 发消息会丢失;有时候使用 requests 抓取网页会卡死
    wuxqing
    wuxqing
    Mar 17, 2017❤️1
    11
    gunicorn+meinheld 我测试不稳定,会出现空白页面。我现在用的是 gunicorn+gevent
    wuxqing
    wuxqing
    Mar 17, 2017❤️1
    12
    如果要性能高,可以试试 sanic ,速度很惊艳
    gladuo
    gladuo
    Mar 17, 2017
    13
    大概就是这个水平,用 cache 吧
    jarlyyn
    jarlyyn
    Mar 17, 2017
    14
    redis 用了链接池没有?

    上次代码有错,连接池没有挂上。

    不管什么机器死活只有几千 qps 。

    改成连接池后上几 w 了。
    xu1ming
    xu1ming
    Mar 17, 2017 via iPhone❤️1
    15
    楼主可以试试 gunicorn+meinheld 并发很高
    xu1ming
    xu1ming
    Mar 18, 2017 via iPhone
    16
    @wuxqing 能具体描述下空白页怎么出现的吗,我用了一年多,好像没出现说白页的…
    wuxqing
    wuxqing
    Mar 18, 2017
    17
    @xu1ming 当时的情况:
    有几个 API 服务, flask 写的,用的是 uWSGI ,工作一直正常,但是加上日志后(用 zmq 转发),出现日志丢失的情况
    然后改用 gunicorn ,默认 worker class 是 sync ,测试正常
    由于性能偏低,改用 meinheld ,然后客户端有时会出现异常,输出日志发现 API 服务返回的是空白页(状态是 200 )
    现在用 gunicorn+gevent ,未出现问题

    顺便说下, API 服务是在 docker 中运行的
    sagaxu
    sagaxu
    Mar 19, 2017
    18
    @wuxqing uwsgi 里用 zmq 需要 enable-threads 和 lazy-apps 。因为 zmq 会创建后台线程去做报文收发,操作系统的机制决定, fork 出来的子进程会丢失线程,导致新创建的 worker 进程没有 zmq 的线程,能正常工作就怪了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2681 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 13:42 · PVG 21:42 · LAX 05:42 · JFK 08:42
    ♥ Do have faith in what you're doing.