首先,您没有完成server.js代码。与数据库打开的连接过多存在一个错误。为了解决这个问题,我使用了connectionPool。其次,Apache使用工作程序来并行运行同一脚本的许多副本。
现在将Apache + PHP + MySQL(XAMP)的结果作为参考点:
Concurrency Level: 100Time taken for tests: 7.476 secondsComplete requests: 1000Failed requests: 0Total transferred: 230000 bytesHTML transferred: 42000 bytesRequests per second: 133.77 [#/sec] (mean)Time per request: 747.557 [ms] (mean)Time per request: 7.476 [ms] (mean, across all concurrent requests)Transfer rate: 30.05 [Kbytes/sec] received
现在等于我修复了server.js的机会
var http = require('http');var mysql = require('mysql');var connection = mysql.createPool({ connectionLimit: 10, host : 'localhost', user : 'test', password : 'test', database : 'testDB'});var server = http.createServer(function (req, res) { connection.query("INSERT INTO Persons (LastName, FirstName, Address, City) VALUES ('Futterkiste', 'Alfreds', 'Obere Str. 57', 'Berlin')", function(err, rows, fields) { if (!err) console.log('The solution is: ', rows); else { console.log('Error while performing Query.'); } res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World'); });});server.listen(1337, '127.0.0.1');server.on('close', function() { connection.end();})console.log('Server running at http://127.0.0.1:1337/');和节点+ MySQL的结果:
Concurrency Level: 100Time taken for tests: 7.289 secondsComplete requests: 1000Failed requests: 0Total transferred: 112000 bytesHTML transferred: 11000 bytesRequests per second: 137.19 [#/sec] (mean)Time per request: 728.899 [ms] (mean)Time per request: 7.289 [ms] (mean, across all concurrent requests)Transfer rate: 15.01 [Kbytes/sec] received
如您所见,结果非常接近。但这是针对11位Apache工作者的一个节点过程。如果将群集添加到方程中会怎样?这是修改后的代码:
var http = require('http');var mysql = require('mysql');var cluster = require('cluster');if (cluster.isMaster) { cluster.fork(); cluster.fork(); cluster.fork(); cluster.fork();} else { var connection = mysql.createPool({ connectionLimit: 10, host : 'localhost', user : 'test', password : 'test', database : 'testDB' }); var server = http.createServer(function (req, res) { connection.query("INSERT INTO Persons (LastName, FirstName, Address, City) VALUES ('Futterkiste', 'Alfreds', 'Obere Str. 57', 'Berlin')", function(err, rows, fields) { if (!err) console.log('The solution is: ', rows); else { console.log('Error while performing Query.'); } res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World'); }); }); server.listen(1337, '127.0.0.1'); server.on('close', function() { connection.end(); }) console.log('Server running at http://127.0.0.1:1337/ worker:' + cluster.worker.id);}四节点工作者结果:
Concurrency Level: 100Time taken for tests: 2.782 secondsComplete requests: 1000Failed requests: 0Total transferred: 112000 bytesHTML transferred: 11000 bytesRequests per second: 359.48 [#/sec] (mean)Time per request: 278.179 [ms] (mean)Time per request: 2.782 [ms] (mean, across all concurrent requests)Transfer rate: 39.32 [Kbytes/sec] received
出于好奇,我添加了10个工作节点的结果:
Concurrency Level: 100Time taken for tests: 2.647 secondsComplete requests: 1000Failed requests: 0Total transferred: 112000 bytesHTML transferred: 11000 bytesRequests per second: 377.84 [#/sec] (mean)Time per request: 264.665 [ms] (mean)Time per request: 2.647 [ms] (mean, across all concurrent requests)Transfer rate: 41.33 [Kbytes/sec] received
我的笔记本电脑是Core2Duo T6600,Ubuntu 14.04.3,php 5.5.9,节点0.10.37,mysql 5.5.44



