[Python] wsgi vs mod_python

Roberto De Ioris roberto a unbit.it
Lun 27 Lug 2009 10:53:11 CEST


On Mon, 2009-07-27 at 09:26 +0200, Ivan wrote:

> 
>         
>         Quali vantaggi/svantaggi ci sono nell'utilizzare mod_python
>         anziché wsgi, con django ?
>         Il tutto su Linux con apache.
>         
>         Walter
>         

E' un discorso lungo e come al solito e' impossibile stabilire quale dei
2 e' migliore. Provo a fartela il piu' facile possibile.

Sono 2 approcci diversi con i loro pro e contro.

WSGI e' uno standard, e' semplice, chiaro ed ha un solo obiettivo:
rendere l'implementazione di una applicazione web indipendente dal tipo
di webserver che risiedera' davanti. Stiamo parlando quindi di un
protocollo non di una implementazione.

mod_python invece e' una implementazione (simile a mod_php come logica
di funzionamento), integra in apache un interprete python che si occupa
di eseguire il codice richiesto.

Ora, un bravo amministratore di sistema gia' si sentirebbe male al
pensiero che il proprio webserver (che ricordo a tutti e' esposto al
pubblico e quindi gia' di suo deve sostenere ogni tipo di attacco) venga
"inquinato" da un nuovo modulo. 

A questo aggiungi che gli stai dicendo che il suo apache sara' ora in
grado di eseguire codice di qualsiasi tipo (con i permessi di apache) e
nella sua mente arrivera' la vocina del grillo parlante sysadmin che gli
urla (con tanto di eco) "attenzioneeee stai introducendo una componente
non deterministica in un server esposto al pubblicooooo....).

Ora non voglio scatenare il panico ma se avete un webserver su cui fate
eseguire script di altri sotto mod_php (o mod_python) ricordatevi che e'
molto facile distruggere il vostro bel webserver. Indipendentemente da
tutte le protezioni che il modulo possa includere.

Questa e' la nota negativa di mod_python (qualcuno potrebbe aggiungere
che si tratta di un modulo apache non molto utilizzato e quindi di per
se' poco affidabile, ma su questa argomentazione non mi sento di
esprimermi).

Se pero' stai mettendo su un webserver con una sola applicazione python
scritta da te l'equazione cambia e probabilmente il gioco VALE la
candela. Almeno fin quando non decidi che apache (o Linux) ti fanno
schifo e vuoi sostituirli.

E' qui che WSGI ti da una mano. E' indipendente dal webserver (e
ovviamente dal sistema operativo). Puoi spostare la tua app da un
webserver a un altro (che supporti wsgi ovviamente) senza cambiare una
sola riga di codice. Riconfiguri il webserver e sei operativo.

Ma apache come comunica con una applicazione WSGI ?

E' qui che entrano in gioco le implementazioni di server WSGI.

Ci sono molti webserver wsgi scritti in python a cui le richieste
vengono passate via http dal webserver (quindi un reverse proxy, piu'
standard di cosi' si muore). Il webserver di CherryPy e' uno di questi.

mod_wsgi per apache (di cui trovi una variante, sotto molti aspetti
superiore, per nginx) puo' funzionare sia in maniera simile a mod_python
(integrando l'interprete python in apache che si occupa di eseguire il
modulo wsgi) o in modalita' "daemon" per cui viene generato uno o piu'
processi (che possono girare con il loro uid) che si occupano di gestire
le richieste che Apache gli passa attraverso un socket/pipe.

Flup, e' un server WSGI che comunica con il webserver tramite
FastCGI,SCGI e (udite udite) AJP.

uWSGI (drin drin, pubblicita') e' un server WSGI in C che riceve le
richieste da apache su socket UNIX tramite un semplice ed efficiente
protocollo. Non fa della facilita' di utilizzo (come va di moda di
questi tempi) il suo punto di forza, ma punta tutto sulle feuture e
sull'affidabilita'.

Ci sono altre decine di server (con i piu' svariati approcci), trovi
l'elenco qui:

http://www.wsgi.org/wsgi/Servers


Ovviamente (punto non trascurabile) praticamente tutti i framework web
in python (e molte applicazioni) sono compatibili wsgi. Ma e' anche vero
che mod_python e' compatibile con qualsiasi cosa che sia scritta in
python :)

Cosa scegliere ? Io personalmente ho scommesso sull'approccio WSGI e
come punto a suo favore posso aggiungere che nel mondo ruby (dove il
deploy e' un totale incubo) si e' sviluppato Rack che e' pressocche'
uguale a WSGI mentre mod_ruby e' stato praticamente relegato in un
angolino buio e puzzolente.

Il link che ti ha mandato prima Sandro e' sicuramente un ottimo punto di partenza.


-- 
Roberto De Ioris
http://unbit.it
JID: roberto a jabber.unbit.it



Maggiori informazioni sulla lista Python