Apache 2.4 vs Nginx 1.6.2 Web Server Benchmarking: Apache 2.4 vs Nginx 1.6.2 Ciro Amati, Stefania Cardamone, Raffaele Schiavone Universitá degli Studi di Salerno January 6, 2015 Apache 2.4 vs Nginx 1.6.2 Overview Introduzione Server Web Configurazione Software Hardware Test Parametri Workload Test Statici Test Dinamici Conclusioni Apache 2.4 vs Nginx 1.6.2 Introduzione Server Web Server Web I E’ un’applicazione software I Esecuzione: server fisico I Protocollo utilizzato per la comunicazione: HTTP (o HTTPS) I HTTP request. Il client effettua una richiesta al Web Server I HTTP response. Il Web Server risponde alla richiesta Apache 2.4 vs Nginx 1.6.2 Introduzione Server Web Web Server piú diffusi Apache 2.4 vs Nginx 1.6.2 Introduzione Server Web Apache HTTP Server I I Sviluppatore: Apache Software Foundation Piattaforma server Web modulare piú diffusa I I UNIX/Linux Microsoft Apache 2.4 vs Nginx 1.6.2 Introduzione Server Web Apache HTTP Server I Vantaggi: I I I I I Affidabilitá Facilitá di implementazione Modularitá Ottima documentazione Svantaggi: I I I Enorme consumo di memoria del demone Basato su un’architettura multithreaded: un thread coinvolge l’utilizzo di grandi quantitativi di memoria Sottoposto ad attacchi di tipo DoS (slow-loris) Apache 2.4 vs Nginx 1.6.2 Introduzione Server Web Nginx I Sviluppatore: Igor Sysoev I E’ anche un server proxy di posta elettronica (IMAP / POP3) Multipiattaforma: I I I I I I I Unix Linux varianti di BSD Mac OS X Solaris Microsoft Windows Apache 2.4 vs Nginx 1.6.2 Introduzione Server Web Nginx I Vantaggi: I I I I I Web servers di tipo asincrono (Apache é basato su un’architettura process-based e necessita di 1 thread per ogni richiesta da soddisfare) Basato su un’architettura che consente di servire piú richieste con uno solo o con pochissimi thread Consumo di memoria quasi nullo o modesto Ottima documentazione Svantaggi: I I Puó essere scaricato solo sotto forma di sorgenti da ricompilare Documentazione ufficiale in russo Apache 2.4 vs Nginx 1.6.2 Configurazione Software Software I Server: I I I I Apache 2.4 Nginx 1.6.2 MySQL + PHPMyAdmin Client: I Httperf 0.9.0 Apache 2.4 vs Nginx 1.6.2 Configurazione Hardware OS utilizzati ... Client MacOS MacOS Windows Linux MacOS Linux Server MacOS Windows MacOS MacOS Linux Linux Esito Negativo Negativo Negativo Negativo Negativo Positivo Apache 2.4 vs Nginx 1.6.2 Configurazione Hardware Apache 2.4 vs Nginx 1.6.2 Configurazione Hardware Hardware I Ubuntu 13.10 I Memoria 5,7 GiB Processore Intel Core i5-460M 2.53 Ghz I I I Rete: Fast Ethernet 100Mbps Carico server a riposo: I I Memoria occupata 800 MiB Cpu utilizzata : meno del 10 % Apache 2.4 vs Nginx 1.6.2 Test Parametri Parametri (1) I Performance misurate in termini di: I I I Numero di richieste servite al secondo Tempo di risposta per ogni nuova connessione Throughput I Risposte al secondo * [ header HTTP + dimensione file (su server)] Apache 2.4 vs Nginx 1.6.2 Test Parametri Parametri (2) I – rate: specifica il numero di connessioni al secondo (req/s) I – num-conn: specifica il numero totale di connessioni da creare I – num-call: specifica il numero di chiamate per connessione I Reply rate: (min, avg, max) specifica quante connessioni ha effettuato per secondo I Reply time: specifica quanto tempo il server impiega per gestire la richiesta. Nell’esempio della slide precedente ci sono voluti 10,8 millisecondi tra linvio del primo byte della richiesta e la ricezione del primo byte della risposta Apache 2.4 vs Nginx 1.6.2 Test Parametri Parametri (3) I client-timo: specifica il numero di volte che una sessione di connessione non é riuscita a causa della scadenza del timeout I socket-timo: il numero di volte che una connessione TCP fallisce con un timeout a livello di socket I connrefused: il numero di volte che il server rifiuta una connessione TCP I fd-unavail: il numero di volte che il processo httperf va oltre i file descrittori. Quando questo conteggio é diverso da zero, il test risulta nullo perché il client é stato sovraccaricato Apache 2.4 vs Nginx 1.6.2 Test Workload Workload Il load/stress test di un server web permette di verificare se e come un sito web funziona al crescere delle richieste I E’ simulata la navigazione da parte di molti utenti contemporaneamente I si verificano i tempi di risposta delle varie pagine web analisi dei codici di risposta I I verifica se il server inizia a restituire pagine con errori Apache 2.4 vs Nginx 1.6.2 Test Workload Workload I Test statici - dimensione file: I I I Piccola (20KB) Media (100KB) Test dinamici I I Il test é stato effettuato utilizzando MySQL (entrambi i server) E’ stato utilizzato il database del precedente benckmark I I La query é effettuata sulla tabella Country, la quale genera una lista di 240 righe e 15 colonne Il file PHP generato dalla richiesta, ha dimensione circa 30KB *Download tabella Country Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (20KB) I Parametri httperf: I I I Numero connessioni: 50000 Timeout(s): 5 Dimensioni file (KB): 20 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (20KB) - Server Apache Rate 100 250 400 450 500 550 580 Response time(ms) 0,8 0,8 0,9 0,9 1,0 1,6 845,1 Reply rate(avg) 100 250 400 450 500 550 362 Thrghpt (KB/s) 2023,4 5058 8093,1 9104,5 10115,9 11127,8 7280,6 Errori Rate 580 I client-timo 0 socket-timo 0 connrefused 0 connreset 75 Si riporta evidenziata in giallo la riga corrispondente all’ultimo test senza errori fd-unavail 1064 other 0 Err. 0 0 0 0 0 0 1139 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (20KB) - Server Nginx Rate 100 250 400 450 500 550 580 Response time(ms) 0,8 0,8 0,5 0,5 0,7 1,1 495,3 Reply rate(avg) 100 250 400 450 500 550 490,2 Thrghpt (KB/s) 2017,6 5044 8070,1 9078,7 10087,2 11096,2 9710,8 Errori Rate 580 I client-timo 0 socket-timo 0 connrefused 0 connreset 0 Si riporta evidenziata in giallo la riga corrispondente all’ultimo test senza errori fd-unavail 980 other 0 Err. 0 0 0 0 0 0 980 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (20KB) - Benchmark on Response Time Rate Apache Nginx 100 0,8 0,8 250 0,8 0,8 400 0,9 0,5 450 0,9 0,5 500 1,0 0,7 550 1,6 1,1 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (20KB) - Benchmark on Reply Rate Rate Apache Nginx 100 100 100 250 250 250 400 400 400 450 450 450 500 500 500 550 550 550 580 362 490,2 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (20KB) - Benchmark on Throughput Rate Apache Nginx 100 2023,4 2017,6 250 5058 5044 400 8093,1 8070,1 450 9104,5 9078,7 500 10115,9 10087,2 550 11127,8 11096,2 580 7280,6 9710,8 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (100KB) I Parametri httperf: I I I Numero connessioni: 50000 Timeout(s): 5 Dimensioni file (KB): 100 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (100KB) - Server Apache Rate 50 75 100 125 Response time(ms) 0,8 0,8 0,8 4025,2 Reply rate(avg) 50 75 100 121,6 Thrghpt (KB/s) 4899 7348,5 9798 9120,3 Errori Rate 125 I client-timo 0 socket-timo 105 connrefused 0 connreset 426 Si riporta evidenziata in giallo la riga corrispondente all’ultimo test senza errori fd-unavail 2468 other 0 Err. 0 0 0 2999 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (100KB) - Server Nginx Rate 50 75 100 125 Response time(ms) 0,7 0,7 0,8 2435,8 Reply rate(avg) 50 75 100 131,8 Thrghpt (KB/s) 4898,3 7347,5 8697,3 10011,9 Errori Rate 125 I client-timo 0 socket-timo 117 connrefused 0 connreset 0 Si riporta evidenziata in giallo la riga corrispondente all’ultimo test senza errori fd-unavail 1688 other 0 Err. 0 0 0 1805 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (100KB) - Benchmark on Response Time Rate Apache Nginx 50 0,8 0,7 75 0,8 0,7 100 0,8 0,8 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (100KB) - Benchmark on Reply Rate Rate Apache Nginx 50 50 50 75 75 75 100 100 100 125 121,6 131,8 Apache 2.4 vs Nginx 1.6.2 Test Test Statici Test Statici (100KB) - Benchmark on Throughput Rate Apache Nginx 50 4899 4898,3 75 7348,5 7347,5 100 9798 8697,3 125 9120,3 10011,9 Apache 2.4 vs Nginx 1.6.2 Test Test Dinamici Test Dinamici (30KB) - Server Apache Rate 100 200 300 350 Response time(ms) 2,7 2,6 3,4 1483,2 Reply rate(avg) 100 200 300 207 Thrghpt (KB/s) 3551,3 7102,4 10653,5 7204,9 Errori Rate 350 I client-timo 0 socket-timo 27 connrefused 0 connreset 84 Si riporta evidenziata in giallo la riga corrispondente all’ultimo test senza errori fd-unavail 3316 other 0 Err. 0 0 0 3427 Apache 2.4 vs Nginx 1.6.2 Test Test Dinamici Test Dinamici (30 KB) - Server Nginx Rate 100 200 300 350 Response time(ms) 2,6 2,5 3,2 1150,7 Reply rate(avg) 100 200 300 298 Thrghpt (KB/s) 3551,3 7102,3 10653,5 10430 Errori Rate 350 I client-timo 0 socket-timo 12 connrefused 0 connreset 63 Si riporta evidenziata in giallo la riga corrispondente all’ultimo test senza errori fd-unavail 1330 other 0 Err. 0 0 0 1405 Apache 2.4 vs Nginx 1.6.2 Test Test Dinamici Test Dinamci (30KB) - Benchmark on Response Time Rate Apache Nginx 100 2,7 2,6 200 2,6 2,5 300 3,4 3,2 Apache 2.4 vs Nginx 1.6.2 Test Test Dinamici Test Dinamici (30KB) - Benchmark on Reply Rate Rate Apache Nginx 100 100 100 200 200 200 300 300 300 350 207 298 Apache 2.4 vs Nginx 1.6.2 Test Test Dinamici Test Dinamici (30KB) - Benchmark on Throughput Rate Apache Nginx 100 3551,3 3551,3 200 7102,3 7102,3 300 10653,5 10653,5 350 7204,9 10430 Apache 2.4 vs Nginx 1.6.2 Conclusioni Conclusioni Lavoro procedente Nostro lavoro I Ubuntu 13.04 I Ubuntu 13.10 I Memoria 3,7 GiB DDR3 I Memoria 5,7 GiB I Intel Core i5-450M @2,4 GHz I Intel Core i5-460M 2.53 Ghz I Rete: Fast Ethernet 100Mbps Server I Rete: Fast Ethernet 100Mbps Server I I I I Apache 2.4 Nginx 1.6 Client I I Httperf 0.9.0 I I I Apache 2.4 Nginx 1.6.2 Client I Httperf 0.9.0 Apache 2.4 vs Nginx 1.6.2 Conclusioni Conclusioni Dai test effettuati possiamo riscontrare che, rispetto al lavoro del precedente anno, i nostri risultati sono quasi equivalenti, tranne in alcuni test per il valore di response time. Per i test statici, abbiamo riscontrato un miglioramento di 0,1ms e 0,3ms per il response time, a ogni singolo test. Per i test dinamici, i risultati sono del tutto equivalenti al benchmark dell’anno precedente. Dal punto di visto software, Apache non ha rilasciato nuove versioni. Nginx é passato dalla versione 1.6.0 alla 1.6.2, ma con poche differenze sostanziali. Per cui, le differenze riscontrate, dipendendo sicuramente dal miglioramento dell’hardware utilizzato. Dal punto di vista delle prestazioni, infine, si é potuto riscontrare che i risultati riportati da Nginx sono leggermente inferiori rispetto ad Apache, per quasi tutti i test. In conclusione possiamo affermare che, nonostante Apache sia il Web Server piú diffuso al mondo, Nginx pu essere un valido concorrente.