Apache vs. Nginx
Apache vs. Nginx

Am realizat recent câteva teste de performanță pentru servere web, mai concret între Apache 2.2.22 vs NGinx 1.2.1, respectiv între PHP 5.3 vs PHP 5.4. În acest prim articol, vă voi spune ce a rezultat în urma testării Apache și Nginx, pentru ca în următorul articol să vă prezint și rezultatele celuilalt test.

Mă interesa să aflu care dintre cele două poate servi cele mai multe cereri pe secundă și care răspunde cel mai repede la multe cereri simultane. Nu în ultimul rând, voiam să aflu și care folosește cel mai puțin RAM.

Cum voi testa?

Am creat un server nou pe RackSpace cu Ubuntu 12.04 și 256Mb RAM pentru toate testele,  pe care am făcut update-urile și am instalat doar ce am nevoie pentru acel test, fără să modific setările aplicației. Motivul pentru care nu am făcut nicio modificare în setările aplicației este acela că nu avea rost să pierd câteva zile încercând să fac aplicațiile să-mi servească conținutul meu cât mai bine, iar pentru site-uri live să nu ajute cu nimic acele setări. Ideea este că fiecare aplicație poate primi un mic boost configurând serverul în funcție de nevoi, iar testele mele sunt făcute pentru a-i ajuta pe cei care nu sunt experți în administrarea serverelor, cei care folosesc serverul cu setările default, pentru că le este de ajuns astfel.

Să începem: Apache 2.2.22 vs Nginx 1.2.1.

Am configurat 2 servere, iar după un restart, ambele folosesc ~45 – 46 Mb RAM din cei 238 promiși de RackSpace.

Pentru teste, execut comanda `ab` de câte 5 ori pentru fiecare test, iar între fiecare test dau restart la server. Mai jos sunt rezultatele într-un tabel (media este calculată fără cel mai bun și cel mai rău rezultat, totul împărțit la 3).

Legendă:
TPS = Time per request (mai mic este mai bun)
RPS = Requests per second (mai mare este mai bun)
RAM = RAM usage increase (mai mic este mai bun)
FAILED = The number of failed requests (numărul de cereri eșuate)

1000 requests / 5 concurrent
TRP RPS RAM FAILED
APACHE
0.972 1028.84 1 0
0.91 1099.23 1 0
1.047 955.12 1 0
1.08 926.31 1 0
0.947 1056.11 1 0
mean 0.99 1013.36 1 0
NGINX
0.86 1162.46 0 0
0.822 1215.96 0 0
0.733 1364.48 0 0
0.85 1176.27 0 0
0.804 1243.76 0 0
mean 0.83 1212 0 0
1000 requests / 50 concurrent
TRP RPS RAM FAILED
APACHE
1.073 931.54 2 0
0.842 1187.6 3 9
1.197 835.2 2 0
1.456 686.7 2 0
2.989 149.42 3 0
mean 1.24 817.81 2.33 0
NGINX
0.756 1322.77 0 0
0.774 1292.22 0 0
0.772 1295.06 1 0
0.667 1500.19 0 0
0.708 1412.62 1 0
mean 0.75 1343.48 0.33 0
5000 requests / 100 concurrent
TRP RPS RAM FAILED
APACHE
1.494 669.14 8 0
1.495 669 9 0
1.559 641.25 6 0
1.018 981.84 3 0
1.901 526.09 8 0
mean 1.52 659.8 7.33 0
NGINX
0.9858 1044.32 2 0
1.011 989.13 2 0
1.041 960.23 2 0
0.973 1027.3 2 0
0.987 1013.61 2 0
mean 0.99 1010.01 2 0
10,000 requests / 500 concurrent
TRP RPS RAM FAILED
APACHE
3.952 253.03 12 4
3.669 272.59 12 9
4.27 234.19 13 0
5.723 174.73 13 2
6.311 158.45 14 22
mean 4.65 220.65 12.67 5
NGINX
2.721 367.57 3 0
1.714 583.45 3 0
2.309 433.15 3 0
1.891 528.88 4 0
2.508 398.66 3 0
mean 2.24 453.56 3 0
50,000 requests / 1000 concurrent
TRP RPS RAM FAILED
APACHE
1.263 791.79 11 688
1.263 791.66 14 374
1.263 791.92 13 132
1.263 791.52 14 616
1.262 792.18 13 340
mean 1.26 791.79 13.33 433.33
NGINX
1.263 791.81 2 609
1.263 791.53 5 249
1.32 757.43 5 60
1.263 791.6 4 578
1.263 791.46 5 582
mean 1.26 791.53 4.67 469.67
100,000 requests / 500 concurrent
TRP RPS RAM FAILED
APACHE
1.18 847.62 14 118
1.865 536.26 14 183
1.221 819.07 13 72
1.447 691.23 14 58
1.39 719.19 14 60
mean 1.35 743.16 14 83.33
NGINX
1.156 864.86 3 0
1.164 859.42 3 0
1.38 724.55 3 16
1.233 810.98 3 0
1.34 746.4 3 0
mean 1.25 805.6 3 0

Concluzii:

După cum mă așteptam, Apache își face o grămadă de thread-uri (aproximativ 150-160) pe când Nginx are doar 5. În toate testele, Nginx a servit cererile mai repede, folosind mai puțin CPU și RAM și cu mai puține erori. Ambele webservere servesc (cu un nivel acceptabil de erori) 500 de cereri simultane, dacă aveți nevoie de mai mult de atât, va trebui să scalați, cumva, aplicația (configurați serverul cu KeepAlive, adăugați imaginile într-un sprite, comprimați fișierele de CSS și JavaScript, folosiți un loadbalancer + mai multe servere web).

Urmărește-ne pe Google News Google News

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.