需求和技术指标整理

node服务在引入node性能监控过程中,需要使用alinode,为了对alinode与官方node各项性能指标的差异有进一步的认识,现开展以下调研、测试.

原理性分析

alinode是基于官方node做封装,官方解释是alinode对性能影响可以忽略.

测试方案

1、node版本

Node.js 10.16.3 on Linux 64-bit

2、Linux系统

uname -a

2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

3、 测试代码

循环:

const Benchmark = require('benchmark');
let suite = new Benchmark.Suite('foo', {});
console.log(String(Benchmark.platform));
const arr = new Array(100000).fill(1);
const arr = [] suite.add('for_normal', () => { for (let i = 0; i < arr.length; i++) { }})
.add('for正序-inTurn', () => { for (let i = 0, len = arr.length; i < len; i++) { } })
.add('for倒序-invertedOrder', () => { for (let i = arr.length; i--;) { } })
.add('for_in', () => { for (let i in arr) { } })
.add('for_of', () => { for (let i of arr) { } })
.add('for_map', () => { arr.map(item => { }) })
.add('for_each', () => { arr.forEach(item => { }) })
.add('for_while', () => { let i = 0; let len = arr.length; while (i < len) { i++ } })
.add('while_normal', () => { let i = 0; while (i < arr.length) { i++ } })
.on('cycle', event => { console.log(String(event.target)); })
.on('complete', function () {
const fastest = this.filter('fastest').map('name');
console.log(`Fastest is ${fastest}`); })
.run({ 'async': true });

接口:

const http = require('http'); 

http.createServer((req, res) => {
res.writeHead(200, {'content-type':'text/plain'});
res.end('hello world');})
.listen(3002)
console.log('Server running at http://127.0.0.1:8888/');

4、测试工具

clinic 、autocannon

 
#循环
clinic doctor -- node index.js # connections:10
autocannon http://127.0.0.1:3002 -c 10 # connections:1000
autocannon http://127.0.0.1:3002 -c 1000

测试数据结果

注:12,978 ops/sec每秒执行次数;±0.60% 方差;94 runs sampled 样本

node类型 Node.js 10.16.3循环计算 I/O Node.js 10.16.3
alinode

Node.js 10.16.3 on Linux 64-bit

for_normal x 13,087 ops/sec ±0.68% (94 runs sampled)
for正序-inTurn x 12,976 ops/sec ±0.96% (88 runs sampled)
for倒序-invertedOrder x 13,169 ops/sec ±0.84% (95 runs sampled)
for_in x 80.03 ops/sec ±1.60% (70 runs sampled)
for_of x 890 ops/sec ±1.09% (89 runs sampled)
for_map x 64.73 ops/sec ±0.75% (66 runs sampled)
for_each x 741 ops/sec ±0.64% (92 runs sampled)
for_while x 12,945 ops/sec ±0.94% (93 runs sampled)
while_normal x 12,904 ops/sec ±0.77% (92 runs sampled)
Fastest is for倒序-invertedOrder

 见图1

connections:10

见图3

connections:1000

见图4

官方node

Node.js 10.16.3 on Linux 64-bit
for_normal x 15,697 ops/sec ±3.54% (75 runs sampled)
for正序-inTurn x 12,590 ops/sec ±1.78% (83 runs sampled)
for倒序-invertedOrder x 11,926 ops/sec ±3.29% (78 runs sampled)
for_in x 61.22 ops/sec ±4.13% (53 runs sampled)
for_of x 720 ops/sec ±3.53% (73 runs sampled)
for_map x 52.43 ops/sec ±4.52% (54 runs sampled)
for_each x 617 ops/sec ±3.31% (78 runs sampled)
for_while x 12,124 ops/sec ±3.03% (80 runs sampled)
while_normal x 15,735 ops/sec ±3.69% (79 runs sampled)
Fastest is while_normal,for_normal

见图2

connections:10

见图5

connections:1000

见图6

 图1

图2

图3

 

图4

图5

 

图6

测试结果分析

cpu计算上,alinode略优于普通node,但是不明显;

从网络I/O上看,alinode的延迟性低,每秒处理请求数的性能要优于官方node,数据见下表.

Node 并发10 并发1000 备注
延迟平均值(ms) 延迟标准样本差(ms) 每秒请求数(req/sec) req/sec样本标准差 延迟平均值(ms) 延迟标准样本差(ms) 每秒请求数(req/sec) req/sec样本标准差  
alinode 0.02 0.18 32678.91 8410 32.79 8.81 30114.91 3449.49  
官方node 0.08 0.42 18614.6 4850 53.91 17.95 18430.19 2982.79  

对于生产中的性能待进一步的论证.如有错误,欢迎批评指正.

alinode与node性能测试方法与分析的更多相关文章

  1. 转——Android应用开发性能优化完全分析

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...

  2. Android 应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  3. 【转】Android应用开发性能优化完全分析

    http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...

  4. Android应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  5. nginx / apache / tomcat /resin等 http server的benchmark性能测试方法

    性能测试是软件产品发布前必经阶段,对于web app的发布需要使用http server,可选择的优秀免费http server主要有开源apache server, 俄国的nginx,专用于java ...

  6. Kafka设计解析(五)Kafka性能测试方法及Benchmark报告

    转载自 技术世界,原文链接 Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告 摘要 本文主要介绍了如何利用Kafka自带的性能测试脚本及Kafka Manager测试Kafk ...

  7. 转:Android应用开发性能优化完全分析

    转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...

  8. 如何使用工具进行线上 PHP 性能追踪及分析?

    工作了一两年的 PHPer 大概都多多少少知道一些性能分析的工具,比如 Xdebug.xhprof.New Relic .OneAPM.使用基于 Xdebug 进行 PHP 的性能分析,对于本地开发环 ...

  9. 转:使用xhprof进行线上PHP性能追踪及分析

    原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug ...

随机推荐

  1. jmeter 查看结果树数据分析 优化

    1.点击查看结果树,配置 2.筛选功能项

  2. java架构之路-(spring源码篇)由浅入深-spring实战详细使用

    今天我更新了一篇jvm垃圾回收的算法和垃圾回收器的内部逻辑,但是看的人不多啊......貌似大家还是比较喜欢看源码吧,毕竟实战要比理论用的多. 这篇文章不会详细的深入底层源码,只是基于注解和配置来说说 ...

  3. SpringBoot和Hibernate整合

    1.先使用idea创建maven项目(这个就不详细讲了,很简单的操作) 2.创建完maven项目之后添加springboot依赖,pom.xml文件如下: <?xml version=" ...

  4. [Spark] 04 - HBase

    BHase基本知识 基本概念 自我介绍 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”. ...

  5. 03爬虫-requests模块基础(1)

    requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...

  6. 为elastic的索引做快照并恢复快照到新集群

    1. 为指定的所有做快照 curl -XPUT "192.168.1.1:9200/_snapshot/my_backup/testindex_20170803?wait_for_compl ...

  7. C++进程间通讯方式

    1.剪切板模式. 在MFC里新建两个文本框和两个按钮,点击发送按钮相当于复制文本框1的内容,点击接收按钮相当于粘贴到文本框2内: 发送和接收按钮处功能实现如下: void CClipboard2Dlg ...

  8. 轻松部署calico

    一.资源 官方文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration 二. ...

  9. C# 时间戳的相关操作

    一般的 时间戳 格式分为两种 即 10位(秒)时间戳 与 13位(毫秒)时间戳 时间戳 类型也分为两种 即 本地时间戳 与 世界统一(UTC)时间戳 废话不多说,直接上代码: 一.时间戳获取方法 // ...

  10. Angular 常用命令行

    1. ng -v 查看angular-cli是否安装成功.angular-cli的版本号 2. ng new 项目名称 新建angular项目 3. ng g class 类名 动态生成类文件: 4. ...