webserver shootout

Vineri seara la intalnirea RLUG, amicul meu Vali Palos ne-a aratat AtomWS, un framework web scris de el pentru node.js, pretty interesting stuff. Fiind asta prima ocazie cand am avut ocazia sa vorbesc despre node cu cineva care chiar il foloseste, mi-am zic ca pare sa fie ceva interesant dincolo de hype, asa ca dupa cateva lecturi pe metrou, mi-am instalat aseara node pe laptop si am facut niste teste (in joaca, pentru ca nu sunt calificat sa fac comparatii de-astea foarte serioase).

Ce-am facut: am aranjat sa servesc un "hello world" atat direct cu node.js, cat si via AtomWS (caruia a trebuit sa fac niste mici modificari sa mearga cu node 0.4.8 din Debian), si ca textfile din apache-ul instalat local, cat si ca aplicatie Plack pentru perl, servita fie cu HTTP::Server::PSGI, fie cu Twiggy (un webserver bazat pe AnyEvent). M-a batut gandul sa caut si chestii in Python sau Ruby (cu Tornado respectiv EventMachine), dar am decis ca ma pricep prea putin la astea anyway asa ca m-am oprit aici.

Concluziile au fost ca:

  • apache se tine suficient de bine pe picioare (mi-a dat cei mai mici timpi de raspuns, nu reusesc sa-mi explic de ce), insa la concurenta mare tinde sa dea erori si ramane in urma fata de resul la numarul de requesturi pe secunda (in jur de 1000/s);
  • HTTP::Server:PSGI nu imi da failed requests (desi la concurenta mare crapa ab-ul, poate e laptopul meu de vina), insa e destul de slow raspunsul si ca numar de requesturi pe secunda se invarte pe langa apache. De notat insa ca H::S::P e gandit doar pt. development si teste, nu pentru productie
  • trecand in zona de event-based webservers, node.js e... interesant. Mi-a raspuns cu aceeasi frecventa indiferent de nivelul de concurenta. 10, 100, 1000, 2000 de requesturi simultane, el tot cam cu 6500/s raspundea, se constata doar o usoara crestere a imprastierii rezultatelor
  • folosind AtomWS peste node.js, scade putin rata de raspuns undeva pana pe la 5000/s, curios insa ca se consolideaza rezultatele, sunt mult mai grupati timpii de raspuns decat la versiunea cu barebone node. Habar n-am ce inseamna asta;
  • arma mea secreta, twiggy, s-a comportat foarte bine, scotand cam 3500 req/s si ma pregateam sa inchei acest articol pe o nota impaciuitoare pana mi-a dat prin cap sa ma uit pe plackperl.org dupa alte webservere, asa ca l-am gasit pe
  • Feersum, bazat pe libev (la fel ca node.js), recomandat pentru situatii cu concurenta mare. Feersum a avut nesimtirea sa nu scoata mai putin de 10500 de requesturi pe secunda (concurenta mai mare de 2000 nu pot pe o singura masina din cauza de ulimit -n)

Poate o data reiau problema mai serios, similar cu nenea asta si fac si eu niste poze frumoase.

For now, pot dormi linistit stiind ca nu va trebui sa fac reconversie profesionala pe javascript (asa cum am scapat pana acum si fara sa invat prea mult Erlang).

La modul serios, pare foarte cool node.js si incepe sa-si justifice intrucatva hype-ul (asta fiind, by the way, singurul rezultat concret al testelor de mai sus).

Comments are closed.