巅峰对决:node.js和php性能测试

14 篇文章 0 订阅

参考网站:http://snoopyxdy.blog.163.com/blog/static/60117440201183101319257/

选手介绍:

node.js,服务端javascript语言,以出色的事件驱动和I/O异步广受关注,它更像一辆性能出色的 Mitsubishi Evlution X
php,耳熟能详的服务端语言,在互联网领域中市场占有率相当高,它更像一辆性能出色,品牌知名度高的 BMW 330i

驾驶员以及测试员介绍:
网络环境:内网
驾驶员(压力测试服务器): 
服务器系统:Linux 2.6.18 
服务器配置:Intel(R) Xeon(TM) CPU 3.40GHz 4 CPUS 
内存:6GB 

测试员(发包服务器): 
发包工具:apache 2.2.19自带的ab测试工具 
服务器系统:Linux 2.6.18 
服务器配置:Pentium(R) Dual-Core CPU E5800 @ 3.20GHz 2CPUS 
内存:1GB 

车辆介绍:
Mitsubishi Evlution X(node.js):以下简称EVO(node)
版本:V0.4.9;
官方提供性能:6985req/sec(http请求);
改装情况:
1、涡轮增压套件:multi-node(在多核服务器上多开node进程提高性能);
2、运动避震和地盘套件:generic-pool(链接池,用以提高对mysql、redis等i/o操作的性能);

BMW 330i(php):以下简称330(php)
版本: 5.2.17;
官方提供性能:8220 req/sec(http请求);
改装情况:
宝马御用改装ACSCHNITZER提供:Nginx+FastCgi;

注意:可能我php配置不是最优化,应该还可以再快一些,下面的一些测试配置都是根据网上的文章进行配置的,如果大师级高手来配的话,估计PHP性能还能提升50%左右,所以这个测试数据仅供参考。
配置是根据张宴的博客再根据实际情况修改来的,原文地址: http://blog.s135.com/nginx_php_v6/

序:
对于原厂 EVO(node) 和经过改装的 EVO(node)之间到底性能会差多少?我们让他们在场地上小试一下身手。
测试内容:
分别对redis的一个key值进行get操作,并返回这个值。压力分别在3000、5000、7000,压测30秒。

com3000/30 3000/30 3000/305000/305000/30  5000/307000/30  7000/307000/30 
type node0 node1node2  node0 node1node2 node0 node1 node2 
rps 4025 5479 5262 3913 5283 5353 3823 5258 5269
 tpq 0.24 0.18 0.19 0.26 0.19 0.18 0.26 0.21 0.19
 80%req 63 131 671 448 417 1210 1961 856 1650
 fail 0 0 0 0 0 0 227 0 0
   
说明:(下同)
node0表示原装,node1表示只进行了multi-node改装,node2表示进行了multi-node和generic-pool改装。
3000/30:代表命令./ab -c 3000 -t 30 http://10.1.10.150:8888/ 
rps:代表每秒处理请求数,并发的主要指标 
tpq:每个请求处理的时间,单位毫秒。 
fail:代表平均处理失败请求个数 
80%req:代表80%的请求在多少毫秒内返回。 

接下来我们看下对mysql的操作,3者的区别,对mysql的testtable进行select * 操作,testtable有2个字段,1条数据。返回name值为test。

com3000/30 3000/30 3000/305000/305000/30  5000/307000/30  7000/307000/30 
type node0 node1node2  node0 node1node2 node0 node1 node2 
rps1247 2465 2999 1211 2451 301312432440 3054
 tpq 0.82 0.40 0.33 0.82 0.41 0.33 0.80 0.42 0.33
 80%req2424 2080 627 4329 3103 1365 5433 3610 3188
 fail 0 0 0 0 0 00 0 0

multi-node的应用显然大大提升了node的性能,连接池只有在特定的情况下才能更好的作用。
如果连接时间越长,操作DB越复杂,例如对redis操作多个key或是排序等,连接池的性能就更能体现出来了。

具体如何对EVO(node)进行改装,详见我的博客: http://snoopyxdy.blog.163.com/blog/static/601174402011841174351/

chapter1:男人之间的战斗,0-400M直线加速
0-400米直线竞速赛又称为“直线加速度赛”,是专为赛车性能而生的比试,没有办法逃避,只能勇往直前。
在空旷的飞机场, EVO(node)330(php)正准备着一场赤手空拳的较量。
测试内容:
对“hello world” web服务器进行测试,空框架,无任何业务负载。

 com 3000/30 3000/305000/30 5000/30 7000/30 7000/30 
 type nodephp node php  nodephp 
 rps 7677 3624 7232 3760 6743 3731
 tpq 0.13 0.39 0.14 0.41 0.15 0.42
 80%req 138 843 477 1343 898 2445
 fail 0 0 0 0 0 0
   
EVO(node)在multi-node的4涡轮增压下(4CPU),一路领先,直到终点,不过在测试中4个CPU一直出于饱和状态,如果有8个核,估计能更快。
而php由于我菜鸟级的配置改装,无法完全发挥他的性能,网上有TX将php裸奔到5000+rps的,大家可以去参考一下。


chapter2:都市街跑,考量你的驾驶技术
跑在都市的路上,经常会看见有两部车子先后从你身边呼啸而过,伴随着引擎轰鸣声的远去,你能感受到速度的激情。 犹如我们经常穿梭在繁华的都市内,所以先将生产中最常用到的mysql进行对比测试。
测试内容:
对数据表test进行select * 操作,test数据表内只有一条数据,2个字段,然后返回name,值为test。

 com 3000/30 3000/305000/30 5000/30 7000/30 7000/30 
 type node php  node  php  node php 
 rps 2999 1293 3013 1349 3054 1301
 tpq 0.33 0.82 0.33 0.80 0.33 0.80
 80%req 627 1369 1365 1979 3188 3903
 fail 0 0 0 111 0 573

mysql是建立和释放连接都比较长的,所以node和php性能相比裸奔都大幅下降。
由于php每次请求都需要建立释放连接,所以耗时更长。
EVO(node)在这时的优势就发挥出来了,multi-node和generic-pool两大利器无缝合作,在街头巷尾远远的甩开了 330(php)
还是那句老话,可能php改装的不到位,各位做个参考把。

chapter3:城市高架,隧道口,匝道上都是我们展现速度的舞台
高架的诞生是为缓和日益阻塞的城市交通,高架上不仅是豪车的天下,更是性能车的舞台,让我们去体验砸道秒杀一切的快感吧。
memcache是作为缓解mysql瓶颈的最佳工具,php+memcache+mysql一直是很经典的组合,广泛用于各大互联网站点内。
测试内容:
对memcache的“test”key取值,然后返回这个值“test”。

 com 3000/30 3000/305000/30 5000/30 7000/30 7000/30 
 type node php  node  php  node php 
 rps 5102 1957 4995 1841 4976 1872
 rpt 0.2  0.64 0.2 0.74 0.19 0.70
 80%req 672 1713 1033 2150 1494 3551
 fail 0 7 0 79 0 335

和mysql对比,memcache建立和释放连接时间要更短,而且直接操作内存,所以两者的测试结果都有不少的上升。
这里php还是受限于他建立和释放连接的损耗,成绩不理想。

chapter4:决战纽博格林
真正的赛车都必须去征服赛道之王——德国纽博格林北环赛道,这条被 誉为 绿色地狱的20.6km赛道是让赛车 在原始的山林之间高速穿梭,赛道随着山势而起伏,宛若云霄飞车。evo在这条赛道的最佳成绩是7分32秒52,而  AC-Schnitzer改装的BMW M3,最佳成绩是 7分36秒。
在高速信息化的时代,我们对速度的渴望越发的强烈,Redis作为高速nosql内存db,以其出色的性能被大众认可,现在越来越多的互联网站点加入到了nosql行列。
测试内容:
对Redis的“test”key取值,然后返回这个值“test”。

 com 3000/30 3000/305000/30 5000/30 7000/30 7000/30 
 type nodephp node php  nodephp 
 rps 5262 2015 5353 1949 5269 1901
 tpq 0.19 0.61 0.18 0.61 0.19 0.61
 80%req 671 1805 1210 2356 1650 3816
 fail 0 0 0 105 0 607

这个测试结果和memcache相差不大,因为redis和memcache相比他的优势不再key-value上,而是hash和sort,还有pub/sub等,所以在纯粹的key-value上,这次测试两者性能不相伯仲。
最终在 纽博格林北环赛道, EVO(node) 率先冲过了终点,成为本次对比的赢家。

尾声:
我想这次测试的结果应该早已经在各位的预料之中了,事件驱动对于内存消耗更少,非阻塞和连接池的加入让node对I/O操作更上一层楼。
虽然php在各方面都落于下风,但是并不代表php就不如node,php有他更适合的应用场景和广泛的开源框架以及技术支持。
node作为一种新型的服务器语言从被认可,到广泛用于生产环境要走的路还很长。

有图有真像:
巅峰对决:node.js和php性能测试 - snoopyxdy - snoopyxdy的博客

这个是在3000并发连发30秒测试的,如果1000并发连发30秒可以到8000+。
见下图:

巅峰对决:node.js和php性能测试 - snoopyxdy - snoopyxdy的博客
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值