2016-06-22 21 views
2

Vor ein paar Jahren habe ich node.js vs Apache 2 getestet. Die Ergebnisse waren beeindruckend. node.js war sehr schnell, besonders mit hoher Parallelität.Warum ist node.js so viel langsamer als Apache 2.4

Gestern wollte ich zeigen, dass jemand und .... outch Apache 2.4 viel schneller war.

Das Setup:

Node.js (Express.js, Knoten 6.2.2)

const http = require('http'); 

const hostname = '127.0.0.1'; 
const port = 3000; 

const server = http.createServer((req, res) => { 
    res.statusCode = 200; 
    res.setHeader('Content-Type', 'text/plain'); 
    res.end('Hello World\n'); 
}); 

server.listen(port, hostname,() => { 
    console.log(`Server running at http://${hostname}:${port}/`); 
}); 

Apache 2.4 (dazu dient, eine PHP-Datei)

<?php 
    $foo = "Hello"; 
    $bar = "World"; 
    echo "$foo $bar"; 
?> 

Ich startete Apache mit Port 80 Dann startete ich die node.js App auf Port 3000 und testete alles mit Apache Benchmark

ab -r -n 10000 -c 10 http://127.0.0.1/ 

Ergebnisse:

Server Software:  Apache/2.4.18 
Server Hostname:  127.0.0.1 
Server Port:   80 

Document Path:  /
Document Length:  11 bytes 

Concurrency Level:  10 
Time taken for tests: 4.439 seconds 
Complete requests:  10000 
Failed requests:  0 
Total transferred:  1980000 bytes 
HTML transferred:  110000 bytes 
Requests per second: 2252.97 [#/sec] (mean) 
Time per request:  4.439 [ms] (mean) 
Time per request:  0.444 [ms] (mean, across all concurrent requests) 
Transfer rate:   435.63 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 1 1.3  0  12 
Processing:  1 3 1.8  3  88 
Waiting:  0 3 1.5  3  38 
Total:   1 4 1.8  4  91 

Percentage of the requests served within a certain time (ms) 
    50%  4 
    66%  4 
    75%  5 
    80%  5 
    90%  6 
    95%  7 
    98%  9 
    99%  10 
100%  91 (longest request) 

Node.js

ab -r -n 10000 -c 10 http://127.0.0.1/ 

Ergebnisse:

Server Software: 
Server Hostname:  127.0.0.1 
Server Port:   3000 

Document Path:  /
Document Length:  19 bytes 

Concurrency Level:  10 
Time taken for tests: 8.513 seconds 
Complete requests:  10000 
Failed requests:  0 
Non-2xx responses:  10000 
Total transferred:  4020000 bytes 
HTML transferred:  190000 bytes 
Requests per second: 1174.64 [#/sec] (mean) 
Time per request:  8.513 [ms] (mean) 
Time per request:  0.851 [ms] (mean, across all concurrent requests) 
Transfer rate:   461.14 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 0.3  0  7 
Processing:  1 8 4.4  8  69 
Waiting:  0 8 4.3  7  69 
Total:   2 8 4.4  8  69 

Percentage of the requests served within a certain time (ms) 
    50%  8 
    66%  9 
    75%  10 
    80%  10 
    90%  12 
    95%  15 
    98%  20 
    99%  23 
100%  69 (longest request) 

Das gleiche, wenn ich für n testen = 1000, c = 100 ... oder höher Apache ist immer doppelt so schnell.

Hat sich etwas geändert? Haben sie Apache 2.4 massiv beschleunigt? Oder sind node.js alt und langsam geworden?

Ich erinnere mich wirklich, dass node.js war schneller, sobald es eine Gleichzeitigkeit von mehr als 5 oder 10 ...

Bin ich bin nicht in Ordnung war? Jeder Kommentar geschätzt.

Mit freundlichen Grüßen Martin

UPDATE

ich diesen Artikel im Internet gefunden http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-apache-php

Ich kann nicht diese Ergebnisse reproduzieren. Apache ist schneller, wenn ich die gleichen Einstellungen versuche.

+2

Dies sind nur meine Gedanken über das Thema und mein Wissen über Knoten und Apache, nicht sicher, ob sie die Antwort sind: Knoten nur ein Thread all diese Anfragen zu behandeln würde sicherlich verbringen mehr Zeit auf die Behandlung dieser kleinen Anfragen Sie sind Einrichten, im Vergleich zu Apache, die ich glaube, ist Multi-Threaded? Allerdings, wenn Sie eine Vielzahl von Anforderungen (einige kleine, einige mittlere und einige schwere) hatten, würde Nodejs Excel, in der Lage sein, schnell zwischen allen Jobs wechseln, nicht an die schweren Jobs gebunden, während die Threads von Apache würde arbeiten schwere Jobs bis zur Fertigstellung?Nur ein Gedanke. –

+0

@Stian Ich stimme völlig zu. Vielleicht ist der Testaufbau nicht wirklich der, der die Vorteile von node.js zeigt. In solchen Fällen ist Apache wahrscheinlich immer schneller ... – marschro

Antwort

3

Schauen Sie sich die 2 Ergebnisse an. Sind sie gleich? Es gibt einen Unterschied hier: Nicht-2xx Antworten: 10000

Ihre Testergebnisse sind nicht die gleichen, so können wir nichts über die Leistung sagen, bis das festgelegt ist.

Verwandte Themen