Node.js медленнее, чем Apache

Я сравниваю производительность 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 для экземпляра node это время выполнения:

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 действительно медленнее в этом сценарии?

Редактировать 1 : Я заметил, что параллелизм узлов лучше - при увеличении количества одновременных запросов до 1000 Apache начинает отбрасывать некоторые из них, а узел работает нормально без разрыва соединений.

26
задан Art 9 July 2011 в 14:25
поделиться