Python WSGI Server性能简易评估

WSGI概念

WSGI的全称是Web Server Gateway Interface,这是一个规范,描述了web server如何与web application交互、web application如何处理请求。

PEP 3333中详细定义了WSGI规范:https://www.python.org/dev/peps/pep-3333/

Python中常见的WSGI服务器有:Gunicorn, uWSGI,bjoern, Meinheld等。
本人用得较多的是Gunicorn,而Instagram(公开演讲中提到)使用的uWSGI。

测试脚本

一个最简单的application放在app.py中:

Bjoern.wsgi文件:

Gunicorn+Meinheld脚本:

其中,测试工具使用wrk工具https://github.com/wg/wrk,脚本如下:

代码脚本等,详见:https://github.com/smilejay/python/tree/master/wsgi_benchmarking_2018

测评结果

在某个2核4G内存的虚拟机上,用上面提到的最简易的程序进行评估,得到如下图的数据,表示100、500、1000、5000、10000并发连接数下每秒处理的请求数。

性能测评结论

鉴于对各个WSGI server的配置改变就回来较大的性能差异,以及本例只是一个简单的返回一个“OK”字符串的的示例,所以此处结论并不一定准确,请大家谨慎参考。
1. bjoern 和 Gunicorn+Meinheld 并列第一;但是bjoern可能过于简单,例如它不支持HTTP 1.1,所以可能不是在生产环境中最好的选择,不过对于提供后端REST API可能是个不错的选择。
2. uWSGI 性能高于 Gunicorn,二者都是非常成熟的项目,文档和各种支持都比较完善;当然Gunicorn与Meinheld配合使用时性能是极好的。
3. CherryPy 在本次测评中倒数第一,由于我对它并不熟悉,所以估计有配置方面的问题,因为参考资料中有一篇文章测试表明它比uWSGI的性能要好。

参考资料

  • https://github.com/wg/wrk (HTTP Benchmark测试工具)
  • https://github.com/jonashaag/bjoern/tree/master/bjoern
  • http://gunicorn.org/
  • http://meinheld.org/
  • https://uwsgi-docs.readthedocs.io/en/latest/index.html
  • http://docs.cherrypy.org/en/latest/index.html#
  • https://blog.appdynamics.com/engineering/an-introduction-to-python-wsgi-servers-part-1/
  • https://blog.appdynamics.com/engineering/a-performance-analysis-of-python-wsgi-servers-part-2/

master

Stay hungry, stay foolish.

发表评论

电子邮件地址不会被公开。 必填项已用*标注