Web Server Benchmarking: Apache 2.4 vs Nginx 1.6.2 Ciro Amati, Stefania Cardamone Universitá degli Studi di Salerno February 16, 2015
Overview Introduzione Server Web Configurazione Software Hardware Parametri Workload Statici Dinamici Conclusioni
Introduzione Server Web Server Web E un applicazione software Esecuzione: server fisico Protocollo utilizzato per la comunicazione: HTTP (o HTTPS) HTTP request. Il client effettua una richiesta al Web Server HTTP response. Il Web Server risponde alla richiesta
Introduzione Server Web Web Server piú diffusi
Introduzione Server Web Apache HTTP Server Sviluppatore: Apache Software Foundation Piattaforma server Web modulare piú diffusa UNIX/Linux Microsoft
Introduzione Server Web Apache HTTP Server Vantaggi: Affidabilitá Facilitá di implementazione Modularitá Ottima documentazione Svantaggi: 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)
Introduzione Server Web Nginx Sviluppatore: Igor Sysoev E anche un server proxy di posta elettronica (IMAP / POP3) Multipiattaforma: Unix Linux varianti di BSD Mac OS X Solaris Microsoft Windows
Introduzione Server Web Nginx Vantaggi: 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: Puó essere scaricato solo sotto forma di sorgenti da ricompilare Documentazione ufficiale in russo
Configurazione Software Software Server: Apache 2.4 Nginx 1.6.2 MySQL + PHPMyAdmin Client: Httperf 0.9.0
Configurazione Hardware OS utilizzati... Client Server Esito MacOS MacOS Negativo MacOS Windows Negativo Windows MacOS Negativo Linux MacOS Negativo MacOS Linux Negativo Linux Linux Positivo
Configurazione Hardware Hardware Ubuntu 13.10 Memoria 5,7 GiB Processore Intel Core i5-460m 2.53 Ghz Rete: Fast Ethernet 100Mbps Carico server a riposo: Memoria occupata 800 MiB Cpu utilizzata : meno del 10 %
Parametri Parametri (1) Performance misurate in termini di: Numero di richieste servite al secondo Tempo di risposta per ogni nuova connessione Throughput Risposte al secondo * [ header HTTP + dimensione file (su server)]
Parametri Parametri (2) rate: specifica il numero di connessioni al secondo (req/s) num-conn: specifica il numero totale di connessioni da creare num-call: specifica il numero di chiamate per connessione Reply rate: (min, avg, max) specifica quante connessioni ha effettuato per secondo 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
Parametri Parametri (3) client-timo: specifica il numero di volte che una sessione di connessione non é riuscita a causa della scadenza del timeout socket-timo: il numero di volte che una connessione TCP fallisce con un timeout a livello di socket connrefused: il numero di volte che il server rifiuta una connessione TCP 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
Workload Workload Il load/stress test di un server web permette di verificare se e come un sito web funziona al crescere delle richieste E simulata la navigazione da parte di molti utenti contemporaneamente si verificano i tempi di risposta delle varie pagine web analisi dei codici di risposta verifica se il server inizia a restituire pagine con errori
Workload Workload statici - dimensione file: Piccola (20KB) Media (100KB) dinamici Il test é stato effettuato utilizzando MySQL (entrambi i server) E stato utilizzato il database del precedente benckmark 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
Statici Statici (20KB) Parametri httperf: Numero connessioni: 50000 Timeout(s): 5 Dimensioni file (KB): 20
Statici Statici (20KB) - Server Apache Rate Response time(ms) Reply rate(avg) Thrghpt (KB/s) Err. 100 0,8 100 2023,4 0 250 0,8 250 5058 0 400 0,9 400 8093,1 0 450 0,9 450 9104,5 0 500 1,0 500 10115,9 0 550 1,6 550 11127,8 0 580 845,1 362 7280,6 1139 Errori Rate client-timo socket-timo connrefused connreset fd-unavail other 580 0 0 0 75 1064 0 Si riporta evidenziata in giallo la riga corrispondente all ultimo test senza errori
Statici Statici (20KB) - Server Nginx Rate Response time(ms) Reply rate(avg) Thrghpt (KB/s) Err. 100 0,8 100 2017,6 0 250 0,8 250 5044 0 400 0,5 400 8070,1 0 450 0,5 450 9078,7 0 500 0,7 500 10087,2 0 550 1,1 550 11096,2 0 580 495,3 490,2 9710,8 980 Errori Rate client-timo socket-timo connrefused connreset fd-unavail other 580 0 0 0 0 980 0 Si riporta evidenziata in giallo la riga corrispondente all ultimo test senza errori
Statici Statici (20KB) - Benchmark on Response Time Rate 100 250 400 450 500 550 Apache 0,8 0,8 0,9 0,9 1,0 1,6 Nginx 0,8 0,8 0,5 0,5 0,7 1,1
Statici Statici (20KB) - Benchmark on Reply Rate Rate 100 250 400 450 500 550 580 Apache 100 250 400 450 500 550 362 Nginx 100 250 400 450 500 550 490,2
Statici Statici (20KB) - Benchmark on Throughput Rate 100 250 400 450 500 550 580 Apache 2023,4 5058 8093,1 9104,5 10115,9 11127,8 7280,6 Nginx 2017,6 5044 8070,1 9078,7 10087,2 11096,2 9710,8
Statici Statici (100KB) Parametri httperf: Numero connessioni: 50000 Timeout(s): 5 Dimensioni file (KB): 100
Statici Statici (100KB) - Server Apache Rate Response time(ms) Reply rate(avg) Thrghpt (KB/s) Err. 50 0,8 50 4899 0 75 0,8 75 7348,5 0 100 0,8 100 9798 0 125 4025,2 121,6 9120,3 2999 Errori Rate client-timo socket-timo connrefused connreset fd-unavail other 125 0 105 0 426 2468 0 Si riporta evidenziata in giallo la riga corrispondente all ultimo test senza errori
Statici Statici (100KB) - Server Nginx Rate Response time(ms) Reply rate(avg) Thrghpt (KB/s) Err. 50 0,7 50 4898,3 0 75 0,7 75 7347,5 0 100 0,8 100 8697,3 0 125 2435,8 131,8 10011,9 1805 Errori Rate client-timo socket-timo connrefused connreset fd-unavail other 125 0 117 0 0 1688 0 Si riporta evidenziata in giallo la riga corrispondente all ultimo test senza errori
Statici Statici (100KB) - Benchmark on Response Time Rate 50 75 100 Apache 0,8 0,8 0,8 Nginx 0,7 0,7 0,8
Statici Statici (100KB) - Benchmark on Reply Rate Rate 50 75 100 125 Apache 50 75 100 121,6 Nginx 50 75 100 131,8
Statici Statici (100KB) - Benchmark on Throughput Rate 50 75 100 125 Apache 4899 7348,5 9798 9120,3 Nginx 4898,3 7347,5 8697,3 10011,9
Dinamici Dinamici (30KB) - Server Apache Rate Response time(ms) Reply rate(avg) Thrghpt (KB/s) Err. 100 2,7 100 3551,3 0 200 2,6 200 7102,4 0 300 3,4 300 10653,5 0 350 1483,2 207 7204,9 3427 Errori Rate client-timo socket-timo connrefused connreset fd-unavail other 350 0 27 0 84 3316 0 Si riporta evidenziata in giallo la riga corrispondente all ultimo test senza errori
Dinamici Dinamici (30 KB) - Server Nginx Rate Response time(ms) Reply rate(avg) Thrghpt (KB/s) Err. 100 2,6 100 3551,3 0 200 2,5 200 7102,3 0 300 3,2 300 10653,5 0 350 1150,7 298 10430 1405 Errori Rate client-timo socket-timo connrefused connreset fd-unavail other 350 0 12 0 63 1330 0 Si riporta evidenziata in giallo la riga corrispondente all ultimo test senza errori
Dinamici Dinamci (30KB) - Benchmark on Response Time Rate 100 200 300 Apache 2,7 2,6 3,4 Nginx 2,6 2,5 3,2
Dinamici Dinamici (30KB) - Benchmark on Reply Rate Rate 100 200 300 350 Apache 100 200 300 207 Nginx 100 200 300 298
Dinamici Dinamici (30KB) - Benchmark on Throughput Rate 100 200 300 350 Apache 3551,3 7102,3 10653,5 7204,9 Nginx 3551,3 7102,3 10653,5 10430
Conclusioni Conclusioni Lavoro procedente Ubuntu 13.04 Memoria 3,7 GiB DDR3 Intel Core i5-450m @2,4 GHz Rete: Fast Ethernet 100Mbps Server Client Apache 2.4 Nginx 1.6 Httperf 0.9.0 Nostro lavoro Ubuntu 13.10 Memoria 5,7 GiB Intel Core i5-460m 2.53 Ghz Rete: Fast Ethernet 100Mbps Server Client Apache 2.4 Nginx 1.6.2 Httperf 0.9.0
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.