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

选手介绍:  javascript

node.js,服务端javascript语言,以出色的事件驱动和I/O异步广受关注,它更像一辆性能出色的Mitsubishi Evlution Xphp

php,耳熟能详的服务端语言,在互联网领域中市场占有率至关高,它更像一辆性能出色,品牌知名度高的BMW 330ijava


驾驶员以及测试员介绍:node

 

网络环境:内网mysql

驾驶员(压力测试服务器): nginx

服务器系统:Linux 2.6.18 web

服务器配置:Intel(R) Xeon(TM) CPU 3.40GHz 4 CPUS redis

内存:6GB sql


测试员(发包服务器): apache

发包工具: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请求);

改装状况:

一、涡轮增压套件:multi-node(在多核服务器上多开node进程提升性能);

二、运动避震和地盘套件: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秒。


com 3000/30  3000/30  3000/30 5000/30 5000/30   5000/30 7000/30   7000/30 7000/30 
type  node0  node1 node2   node0  node1 node2  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。


com 3000/30  3000/30  3000/30 5000/30 5000/30   5000/30 7000/30   7000/30 7000/30 
type  node0  node1 node2   node0  node1 node2  node0  node1  node2 
rps 1247  2465  2999  1211  2451  3013 1243 2440  3054
 tpq  0.82  0.40  0.33  0.82  0.41  0.33  0.80  0.42  0.33
 80%req 2424  2080  627  4329  3103  1365  5433  3610  3188
 fail  0  0  0  0  0  0 0  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/30 5000/30  5000/30  7000/30  7000/30 
 type  node php  node  php   node php 
 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/30 5000/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/30 5000/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/30 5000/30  5000/30  7000/30  7000/30 
 type  node php  node  php   node php 
 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的博客

相关文章
相关标签/搜索