参考网站: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秒。
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作为一种新型的服务器语言从被认可,到广泛用于生产环境要走的路还很长。
有图有真像:
这个是在3000并发连发30秒测试的,如果1000并发连发30秒可以到8000+。
见下图:

巅峰对决:node.js和php性能测试相关推荐

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

    选手介绍: node.js,服务端javascript语言,以出色的事件驱动和I/O异步广受关注,它更像一辆性能出色的Mitsubishi Evlution X: php,耳熟能详的服务端语言,在互联 ...

  2. 【特别推荐】Node.js 中文学习资料和教程导航

    这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...

  3. PHP vs Node.js vs Nginx-Lua(转)

    最近公司在考虑做openapi的proxy服务器,公司主营网游,旗下多款游戏的用户登陆,充值等等有很多接口,想聚合分散的接口统一走一个通道,所以都要走这上面,压力不小. 在语言和平台上主要在nodej ...

  4. Node.JS的魔力与神话

    In May 2020, Node.JS turned 11 years old. 2020年5月,Node.JS才11岁. Since its inception, this programming ...

  5. 关于node.js的web框架的应用及并发性能测试

    "Node.js 是服务器端的 JavaScript 运行环境,它具有无阻塞(non-blocking)和事件驱动(event-driven)等的特色,Node.js 采用 V8 引擎,同样 ...

  6. node.js搭建简单服务器,用于前端测试websocket链接方法和性能测试

    WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询 (Polling)和Comet技术,Come ...

  7. 图灵访谈系列之九:CNode社区谈Node.js技术及生态

    Node.js在各种技术会议上的分享越来越火热,为了让更多的人了解Node.js以及Node.js中文技术社区CNode,12月10日在易宝支付举行第三期Node.js北京分享会--NodeParty ...

  8. 使用node.js进行API自动化回归测试

    概述 传统的QA自动化测试通常是基于GUI的,比如使用Selenium,模拟用户在界面上操作.但GUI测试的开发.维护成本和运行的稳定性一直是测试界的老大难问题.投入大量的人力物力开发.维护.运行,却 ...

  9. Node.js session 存储的几种方法

    2019独角兽企业重金招聘Python工程师标准>>> Since the accepted answer is only connecting to remote hosts, i ...

最新文章

  1. Android开发傲娇之作
  2. Intellij 如何在新窗口中打开项目
  3. 【Python学习系列二十九】scikit-learn库实现天池平台智慧交通预测赛
  4. leetcode256. 粉刷房子
  5. 进程间通信线程间通信
  6. java 多线程的一种实现方式
  7. tomcat的连接数与线程池
  8. java(20) - 代理模式
  9. 如何用AI技术增强企业认知智能?超详细架构解读
  10. ios真机中Text组件出现多余边框
  11. 论文笔记:Multilingual Multimodal Pre-training for Zero-Shot Cross-Lingual Transfer of Vision-Language Mo
  12. python实现同态滤波
  13. 长风破浪正其时,Python天堑变通途(3)(令人智熄的分支循环,优先级问题)
  14. R 和 Rstudio 在线更新
  15. Netty4.x 的逆袭之路 —— 再识 Netty
  16. ubuntu ssh Host key verification failed,Host 10.xxx.xxx.xxx not found in /home/user/.ssh/known_hosts
  17. mysql中声明数组_SQL数据库中怎么定义数组
  18. Python实战之提取豆瓣华语新碟榜数据
  19. Leetcode日练笔记8 #702 Search in a Sorted Array of Unknown Size (Medium)
  20. hive 转拼音udf_<Zhuuu_ZZ>HIVE(十二)UDF自定义函数

热门文章

  1. 计算机和hdmi无法正常显示,电脑使用HDMI接口接显示器 显示不正常甚至黑屏无法显示怎么办...
  2. 读王蒙的《庄子的快活》
  3. 企业的护城河与个人的护城河 更新(2019-05-11)
  4. python教程百度文库_python教程
  5. 从0基础到车载测试工程师,薪资11K,肯拼搏的人,总会有所收获
  6. 利用dpdk rte_ring实现进程间通信
  7. windows 添加 EFI引导
  8. PMP模拟试题与解析(四)
  9. 这11家世界顶级AI初创公司,每个单拎出来都是行业第一
  10. 《keep studying》————《持续学习》英译汉【istrangeboy精品英文励志短文系列】