2

前言

项目中开发的几个服务一直使用tornado作为http服务器,本人也曾提出过疑问,为什么是tornado,得到的答案是比较tornado,flask,django,tornado的并发性能最好,而且最为轻量级。今天好不容易有点空余时间,突然强迫症发作,想搞清楚tornado真的并发比django强吗?为什么django的中间件的优势就被忽略了呢?


1. Tornado vs Django

整体思路就是列举收集到的框架优缺点,然后进行验证,从其他帖子收集到的优缺点汇总如下:

Tornado:
优点:轻量、异步非阻塞IO处理方式、出色的抗负载能力、协程带来优异的处理性能
缺点:没有ORM,提供的支持和模板少,缺少后台支持,对小型项目来说开发速度没有django快
分析:tornado所谓的“缺点”是由它的设计理念决定的,设计上就决定它是一个小而精的http服务器+轻量级web框架,高并发处理才是它真正擅长的

Django:
优点:大而全的框架,全自动化的管理后台带来超高的开发效率,丰富的组件
缺点:厚重,与他自己的ORM高耦合
分析:Django提供的方便,也意味着Django内置的ORM跟框架内的其他模块耦合程度高。应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利;理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛胚房做全新的装修。Django的卖点是超高的开发效率,其性能扩展有限


2. Django的性能表现

前两天有写一篇django的帖子:传送门
使用jmeter对鉴权接口加压,看django的性能表现。
使用的是双核,8G内存的centos机器,200并发的测试结果:

clipboard.png

tps只有2.6,最大时延到了77s


3. Tornado的性能表现

详情见我另外一个帖子:传送门
当然,被测环境资源完全一致,这里只贴结果:

clipboard.png

最大时延484ms,TPS达到了126


4. 选型结论

并发性能差距这么多,当然与django使用默认的sqlite也有关系,但也一定程度上反应django的orm+模板的机制,在提供丰富功能模板的同时,在性能上也做出了牺牲.不过有帖子贴出的性能对比,django的并发数量居然超过了tornado,不知道数据是否靠谱.

5. 写在最后

本来还想引入sanic的性能表现,但sanic只支持python3.5+版本,手头的环境不满足要求,升级起来比较麻烦,这里先留一个坑,后续有环境再测试对比.
看其他帖子的数据,sanic的 并发性能可能会超过tornado,待后续验证


关翔宇
10 声望3 粉丝

即使是一只蜗牛,不停努力的奔跑,也能到达目标