· 测试机器:四核,4GB内存
  · 系统环境:Ubuntu 14.04 LTS
  · 测试环境:django
  · 测试工具:apache ab
  · 测试参数:1000个并发 1000~10000个请求
  测试效果:
  django
  毫无疑问,用原生django的server做处理的表现是烂的,在10000次请求的情况下brokenpipe的几率极高,只有1400次请求被处理,成功率只有14%,我也懒得继续测下去了。
  django + nginx
  这次搭上了nginx做反向代理,也使的脆弱的django服务器的情况有所缓解,但成功率仍然不高(10000次请求中有3684个请求被处理)。
  uwsgi + nginx
  uwsgi是性能极高的一个由C编写的服务器,它使用uwsgi协议,这次让它配合nginx处理django的request,参数为4进程+2线程,性能立即直线上升,处理请求的成功率也基本在90%左右,不过我在测试时遇到了一个坑,是uwsgi在处理请求的时候发送了队列溢出的问题,因为当前测试设置的并发数为每秒1000次并发,而uwsgi的处理队列容量默认为100,导致处理请求的时间加长,而这个问题则可以通过修改somaxcon的大小解决,总的来说,使用uwsgi+nginx是一个理想的选择。
  gunicorn + nginx
  gunicorn跟uwsgi类似,也是一个高性能的http服务器,它由ruby的unicorn项目移植,是由python编写的,它的配置简单,而且可以灵活地搭配其他网络库,部署十分方便,在测试数据中可以看到,用这种配置运行django能在短时间内能处理大量的并发请求,成功率在90%左右。
  gunicorn + nginx + gevent
  前面说的几种环境,看似不错,但我们需要追求完美!由于gunicorn是同步(sync)单线程模型的,有的时候它不免会发生一些阻塞问题,这时候我们为gunicorn加上-k gevent参数来用gevent做处理接口,这比较靠谱地处理了阻塞问题,从数据中可以看到,gunicorn + nginx + gevent的模式不仅拥有的处理成功率,而且时间也在很短之内完成,是5组测试数据当中的性能好的。

  所有测试数据:

  转载自:http://www.jianshu.com/p/19c1af4dd24f?1487473000502