[Python] web: sync vs. async

Alessandro Dentella sandro a e-den.it
Ven 2 Dic 2011 15:36:50 CET


web: sync vs. async


Ciao,

un cliente mi ha chiesto di aiutare a capire come rendere più veloce una
applicazione web che raccoglie dati da molti utenti differenti in
contemporanea (qualche centinaio) e si ingolfa in particolari momenti
del mese di maggior accesso.

Attualmente usano Tornado [1], un incrocio fra un server web ed un piccolo
framework (che tramite un decoratore permette di rendere una funzione
asincrona).

Non ho alcuna esperienza di Tornado, qualche esperienza con twisted e
qualche dubbio sul fatto che quel particolare problema abbia grandi vantaggi
dall'approccio asincrono. L'applicazione lato client usa intensamente ajax e
molte chiamate al server che fanno pochi conti ed una manciata di select
semplici o di piccole join. La macchina ha 4 processori e 4 GB di RAM
(principalmente libera). Ogni chiamata dallo stesso client cambia dati nella
sessione che devono quindi essere sincronizzati fra una chiamata e l'altra.

Mi pare di capire che non tutte le applicazioni beneficiano del fatto di
funzionare in modalità asincrona: qui non esiste tempo di attesa
significativo di dati dalla rete e pare poco (forse migliorabile in ogni
caso) dal database. Avete qualche suggerimento? Qualche opinione (o link
utile) sulla opportunità di usare un server così rispetto ad una
configurazione classica apache + mod_wsgi? Chiaramente l'obiettivo è di
distribuire il carico di lavoro su tutti i processori e successivamente su
più macchine.

sandro
*:-)


[1] http://www.tornadoweb.org/


Maggiori informazioni sulla lista Python