单服务器node.js和php性能测试

选手介绍:

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/303000/303000/305000/305000/305000/307000/307000/307000/30
typenode0node1node2node0node1node2node0node1node2
rps402554795262391352835353382352585269
tpq0.240.180.190.260.190.180.260.210.19
80%req63131671448417121019618561650
fail00000022700
说明:(下同)
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/303000/303000/305000/305000/305000/307000/307000/307000/30
typenode0node1node2node0node1node2node0node1node2
rps124724652999121124513013124324403054
tpq0.820.400.330.820.410.330.800.420.33
80%req24242080627432931031365543336103188
fail000000000
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服务器进行测试,空框架,无任何业务负载。

com3000/303000/305000/305000/307000/307000/30
typenodephpnodephpnodephp
rps767736247232376067433731
tpq0.130.390.140.410.150.42
80%req13884347713438982445
fail000000


EVO(node)在multi-node的4涡轮增压下(4CPU),一路领先,直到终点,不过在测试中4个CPU一直出于饱和状态,如果有8个核,估计能更快。
而php由于我菜鸟级的配置改装,无法完全发挥他的性能,网上有TX将php裸奔到5000+rps的,大家可以去参考一下。

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

com3000/303000/305000/305000/307000/307000/30
typenodephpnodephpnodephp
rps299912933013134930541301
tpq0.330.820.330.800.330.80
80%req62713691365197931883903
fail0001110573

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

chapter3:城市高架,隧道口,匝道上都是我们展现速度的舞台
高架的诞生是为缓和日益阻塞的城市交通,高架上不仅是豪车的天下,更是性能车的舞台,让我们去体验砸道秒杀一切的快感吧。
memcache是作为缓解mysql瓶颈的最佳工具,php+memcache+mysql一直是很经典的组合,广泛用于各大互联网站点内。
测试内容:
对memcache的“test”key取值,然后返回这个值“test”。
com3000/303000/305000/305000/307000/307000/30
typenodephpnodephpnodephp
rps510219574995184149761872
rpt0.20.640.20.740.190.70
80%req67217131033215014943551
fail070790335
和mysql对比,memcache建立和释放连接时间要更短,而且直接操作内存,所以两者的测试结果都有不少的上升。
这里php还是受限于他建立和释放连接的损耗,成绩不理想。

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

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

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

有图有真像:
这个是在3000并发连发30秒测试的7900+,如果1000并发连发30秒可以到8500+。
图片地址在我的博客,拉到最底部:
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页