El Blog de Trespams

Blog personal sobre tecnologia, gestió de projectes i coses que se me passen pel cap

Django CherryPy vs Tornado

Fa pocs dies s'ha alliberat un motor web anomenat Tornado part de la tecnologia que mou FriendFeed.

És un servidor no bloquejant que promet molt en quan a velocitat, pensat per moure FriendFeed i escalar la càrrega que faci falta.

Independentment de que es pugui desenvolupar amb ell tot una aplicació, sols la part de servidor http ja és prou interessant com per fer-li una ullada. En un post a la llista de Django Bret Taylor, un dels autors de Tornado, postejava com connectar el motor amb Django mitjançant WSGI.

Actualment una de les configuracions que més m'agraden per desplegar aplicacions és la combinació nginx+CherryPy WSGI+Django (amb balancejadors, memcached i tota la pesca gràcies a la bona feina de Bernat i Pere), així que estava força intrigat per veure com respondria Tornado.

La base estava feta: una mini-aplicació "hello world" que vaig escriure per comparar aquesta tecnologia/arquitectura amb diferents frameworks PHP, així que ha está un no res actualitzar la darrera versió de CherryPy WSGI i crear una nova aplicació semblant per Tornado.

El codi font és a:

I ara els resultats:

La màquina és un PPC 1 Gb de RAM, 2 CPU de 2 GHz

Amb Tornado WSGI:

ab -c 10 -t 60 http://localhost:8888/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 5000 requests Completed 10000 requests Completed 15000 requests Completed 20000 requests Completed 25000 requests Finished 25022 requests Server Software: TornadoServer/0.1 Server Hostname: localhost Server Port: 8888 Document Path: / Document Length: 266 bytes Concurrency Level: 10 Time taken for tests: 60.019 seconds Complete requests: 25022 Failed requests: 0 Write errors: 0 Total transferred: 9333206 bytes HTML transferred: 6655852 bytes Requests per second: 416.90 [#/sec] (mean) Time per request: 23.987 [ms] (mean) Time per request: 2.399 [ms] (mean, across all concurrent requests) Transfer rate: 151.86 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 6 Processing: 3 24 1.9 24 68 Waiting: 0 24 1.9 23 68 Total: 7 24 1.9 24 68 Percentage of the requests served within a certain time (ms) 50% 24 66% 24 75% 24 80% 24 90% 25 95% 26 98% 27 99% 28 100% 68 (longest request)

Usant CherrPy amb 3 threads (la millor configuració per la meva màquina segons les meves proves)

ab -c 10 -t 60 http://localhost:8088/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 5000 requests Completed 10000 requests Completed 15000 requests Completed 20000 requests Finished 21500 requests Server Software: CherryPy/3.0.3 Server Hostname: localhost Server Port: 8088 Document Path: / Document Length: 266 bytes Concurrency Level: 10 Time taken for tests: 60.001 seconds Complete requests: 21500 Failed requests: 0 Write errors: 0 Total transferred: 8299000 bytes HTML transferred: 5719000 bytes Requests per second: 358.33 [#/sec] (mean) Time per request: 27.907 [ms] (mean) Time per request: 2.791 [ms] (mean, across all concurrent requests) Transfer rate: 135.07 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 20.5 0 2999 Processing: 3 28 10.7 26 413 Waiting: 3 26 10.3 24 412 Total: 3 28 23.1 26 3031 Percentage of the requests served within a certain time (ms) 50% 26 66% 28 75% 30 80% 31 90% 34 95% 38 98% 43 99% 48 100% 3031 (longest request)

En resum:

416.90 req/s for Tornado WSGI 358.33 req/s for CherryPy

Tornado fa que una CPU es posi al 100% gairebé des del començament de l'execució de la comanda ab, CherryPy també posa la CPU al 100% però ho fa més tard i potser això explica la diferència, potser algún gurú de CherryPy em podrà dir una configuració millor que la que tinc.

58 peticions representen un 16% més de peticions que pot aguantar Tornado respecte de CherrPy, i si us hi fixau el codi que es necessita per executar-hi Django és pràcticament calcat gràcies al WSGI.

Seguesc fent proves, però per ara la cosa pinta molt bé.

blog comments powered by Disqus