写在前面:
由于对python语言的热爱加上现在接触到node.js,对其非阻塞异步编程模型非常感兴趣,加之网络上面对两者作web应用性能的测试很少,故在此对两者的性能做个简单的测试。由于python原生是不支持非阻塞异步编程的,故这里对python采用了tornado以支持非阻塞异步编程。
测试环境介绍:
网络环境:localhost
服务器系统:Fedora 15
服务器配置:AMD Athlon II X 4 640
内存:8GB
测试工具:apache 2.2.19自带的ab测试工具
单进程web服务器测试:
该测试基于空逻辑,服务器只返回一段文本‘hello,world’,测试结果如下表:
| 1000c/30s | 1000c/30s |
platform | node.js | python with tornado |
rps | 4771 | 1564 |
tpr | 209ms | 639ms |
80%req | 68ms | 212 |
说明:
1000c/30s:并发1000,压测30秒
rps:没秒处理的请求数
tpr:处理每个请求所花的平均时间
80%req: 80%的请求在多少时间内完成
由上图可以看出虽然都是非阻塞I/O,但是node.js的效率几乎是python在tornado框架下的三倍,python的落败让我很伤心。
多进程web服务器测试:
在node.js中通过引入cluster实现多核处理器开启多个进程,监听同一端口,在python中的tornado框架下通过引入HTTPServer,使用其多进程的特性,服务器依然只返回‘hello,world’,测试结果如下表:
| 1000c/30s | 1000c/30s |
platform | node.js | python with tornado |
rps | 13532 | 5025 |
tpr | 74ms | 198ms |
80%req | 47ms | 94ms |