Я сравниваю производительность Node.js (0.5.1-pre) с Apache (2.2.17) для очень простого сценария - обслуживания текстового файла.
Вот код, который я использую для сервера узла:
var http = require('http')
, fs = require('fs')
fs.readFile('/var/www/README.txt',
function(err, data) {
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end(data)
}).listen(8080, '127.0.0.1')
}
)
Для Apache я просто использую любую конфигурацию по умолчанию, которая идет с Ubuntu 11.04
При запуске Apache Bench со следующими параметрами для Apache
ab -n10000 -c100 http://127.0.0.1/README.txt
Я получаю следующие среды выполнения:
Time taken for tests: 1.083 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 27630000 bytes
HTML transferred: 24830000 bytes
Requests per second: 9229.38 [#/sec] (mean)
Time per request: 10.835 [ms] (mean)
Time per request: 0.108 [ms] (mean, across all concurrent requests)
Transfer rate: 24903.11 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.8 0 9
Processing: 5 10 2.0 10 23
Waiting: 4 10 1.9 10 21
Total: 6 11 2.1 10 23
Percentage of the requests served within a certain time (ms)
50% 10
66% 11
75% 11
80% 11
90% 14
95% 15
98% 18
99% 19
100% 23 (longest request)
При запуске Apache Bench для экземпляра узла это среды выполнения:
Time taken for tests: 1.712 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 25470000 bytes
HTML transferred: 24830000 bytes
Requests per second: 5840.83 [#/sec] (mean)
Time per request: 17.121 [ms] (mean)
Time per request: 0.171 [ms] (mean, across all concurrent requests)
Transfer rate: 14527.94 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.9 0 8
Processing: 0 17 8.8 16 53
Waiting: 0 17 8.6 16 48
Total: 1 17 8.7 17 53
Percentage of the requests served within a certain time (ms)
50% 17
66% 21
75% 23
80% 25
90% 28
95% 31
98% 35
99% 38
100% 53 (longest request)
явно медленнее, чем Apache.Это особенно удивительно, если учесть тот факт, что Apache делает много других вещей, таких как ведение журнала и т. Д.
Я делаю это неправильно?Или Node.js действительно медленнее в этом сценарии?
Edit 1 : я заметил, что параллелизм узла лучше - при увеличении количества одновременных запросов до 1000, Apache начинает отбрасывать несколькоих, в то время как узел работает нормально, без потери соединений.