Medick under Siege - Rezultate
Eram dator de ieri cu rezultatele testului de performata la care a fost supus Medick.
Sincer sa fiu, ma asteptam la rezultatele obtinute. PHP-ul (mod_php) nu poate concura (prin natura sa) cu 10 instante de Mongrel sau cu Python (mod_python). Am vrut totusi sa vad ce diferente sunt si cum reactioneaza Medick comparativ (in special) cu Symfony.
Tunning
Pentru Apache Prefork am utilizat exact metoda de tunning descrisa in testul ce a servit ca inspiratie (si comparatie) pentru acest articol:
StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 150 MaxClients 150 MaxRequestsPerChild 10000
Pentru ca am folosit InnoDB ca storage engine pentru MySQL, am adaugat (activat) in my.cnf urmatoarele setari:
innodb_buffer_pool_size = 64M innodb_additional_mem_pool_size = 16M
Test 1: 30 minute, 50 Utilizatori Concurenti, APC Activat
Transactions: 91179 hits Availability: 99.87 % Elapsed time: 1801,60 secs Data transferred: 86.96 MB Response time: 0.43 secs Transaction rate: 50.61 trans/sec Throughput: 0.05 MB/sec Concurrency: 21.62 Successful transactions: 91175 Failed transactions: 116 Longest transaction: 30.01 Shortest transaction: 0.01
Transactions (91179 hits), inseamna ca am primit numarul asta de acesari in Elapsed Time (1801.60 sec). Serverul a fost disponibil in proportie de Availability (99.87 %), timp in care am transferat Data transferred (86.96) MB. Transaction rate (50.61) reprezinta numarul de tranzactii pe secunda (mai mare mai bine). Cand serverul timite un cod de raspuns 200 inseamna ca tranzactiile au fost efectuate cu succes, Successful transactions (91175), in cazul unui raspuns diferit de 200, tranzactia este esuata, Failed transactions (116).
Se poate observa ca, de 4 ori, serverul a fost de negasit.
Test 2: 3 minute, 50 Utilizatori Concurenti, APC Dezactivat
Transactions: 2561 hits Availability: 99.38 % Elapsed time: 181,32 secs Data transferred: 2.38 MB Response time: 2.64 secs Transaction rate: 14.12 trans/sec Throughput: 0.01 MB/sec Concurrency: 37.24 Successful transactions: 2559 Failed transactions: 16 Longest transaction: 30.61 Shortest transaction: 0.07
Test 3: 3 minute, 50 Utilizatori Concurenti, APC Activat
Transactions: 10279 hits Availability: 100.00 % Elapsed time: 185.94 secs Data transferred: 9.52 MB Response time: 0.40 secs Transaction rate: 55.28 trans/sec Throughput: 0.05 MB/sec Concurrency: 21.91 Successful transactions: 10279 Failed transactions: 0 Longest transaction: 6.64 Shortest transaction: 0.01
Test 4: 3 minute, 150 Utilizatori Concurenti, APC Activat
Transactions: 14501 hits Availability: 99.18 % Elapsed time: 189.25 secs Data transferred: 36.94 MB Response time: 0.62 secs Transaction rate: 76.62 trans/sec Throughput: 0.20 MB/sec Concurrency: 47.82 Successful transactions: 1881 Failed transactions: 120 Longest transaction: 25.28 Shortest transaction: 0.00
Concluzii
Se poate observa ca Medick a raspuns la fel de bine ca Symfony pe o platforma hardware inferioara, numarul mai mare de tranzactii efectuate vine probabil din dimesiumea (mai mica) paginii servite.
APC imbunatateste performanta de 5 ori, lucru observat prin comparatia directa a rezultatelor din testele 2 si 3.
Din pacate aceasta extensie nu va fi prezenta pe serverele unde gazduim paginile web scrise in PHP. Iar zvonul ca extensia APC va fi prezenta si activata in mod implicit in PHP 6, este, well, doar un zvon, si nu cred ca se va intampla acest lucru. Plus, la ritmul de dezvoltare, acoperire si utilizare PHP 6 va fi disponibil cam in 3-4 ani.
Testul 4 m-a pus pe ganduri, serverul MySQL a cedat foarte repede. Rezultatele obtinute de Rails (Ruby) sau Django (Python) ma fac sa cred ca problema sta in clientul mysql din PHP.
Asa ca, am repetat acest test, insa recunosc ca am trisat modificand o linie de cod din ActiveRecord adaugand flagul ce marcheaza conexiunea la baza de date ca fiind persistenta (Creole::PERSISTENT).
Transactions: 11410 hits Availability: 99.78 % Elapsed time: 214.80 secs Data transferred: 10.88 MB Response time: 2.14 secs Transaction rate: 53.12 trans/sec Throughput: 0.05 MB/sec Concurrency: 113.65 Successful transactions: 11408 Failed transactions: 25 Longest transaction: 24.69 Shortest transaction: 0.03
Ce am invatat?
APC aduce un plus de performanta.
Medick are nevoie de setarea diferitilor parametri de conectare la baza de date in fisierul de configurare.
Pe o platforma hardware asemanatoare Medick ar fi mult mai rapid decat Symfony.