前言
项目中开发的几个服务一直使用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并发的测试结果:
tps只有2.6,最大时延到了77s
3. Tornado的性能表现
详情见我另外一个帖子:传送门
当然,被测环境资源完全一致,这里只贴结果:
最大时延484ms,TPS达到了126
4. 选型结论
并发性能差距这么多,当然与django使用默认的sqlite也有关系,但也一定程度上反应django的orm+模板的机制,在提供丰富功能模板的同时,在性能上也做出了牺牲.不过有帖子贴出的性能对比,django的并发数量居然超过了tornado,不知道数据是否靠谱.
5. 写在最后
本来还想引入sanic的性能表现,但sanic只支持python3.5+版本,手头的环境不满足要求,升级起来比较麻烦,这里先留一个坑,后续有环境再测试对比.
看其他帖子的数据,sanic的 并发性能可能会超过tornado,待后续验证
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。