alinode与官方node性能测试方法及分析
需求和技术指标整理
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) 见图1 |
connections:10 见图3 connections:1000 见图4
|
官方node |
Node.js 10.16.3 on Linux 64-bit 见图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 |
对于生产中的性能待进一步的论证.如有错误,欢迎批评指正.