UFCGI 0.2

UFCGI e' una implementazione dei protocolli FastCGI/SCGI per apache2 scritta in mod_perl. A differenza delle controparti in c (mod_fastcgi, mod_fcgid) e' molto piu' snella e permette la configurazione a runtime di molti aspetti.

Il motivo principale che ci ha spinto alla sua realizzazione e' il fatto che non c'e' una giusta configurazione per tutte le applicazioni dei nostri clienti (cosa che viene imposta da mod_fastcgi/mod_fcgid) e che la maggior parte degli utenti ha bisogno di chiari messaggi di errore a schermo piuttosto che un criptico "Internal Server Error".

La versione 0.2 e' una revisione dedicata alle sole ottimizzazioni. Grazie alle nuove patch dei kernel unbit (febbraio/marzo 2008) e' stato possibile rimuovere oltre il 30% di codice dall'implementazione. Inoltre non si e' piu' reso necessario un sistema di locking complesso che nella versione precedente non offriva una sensibile riduzione della latenza rispetto a mod_fastcgi e mod_fcgid.

Il ciclo di una richiesta ufcgi e' il seguente (indipendentemente dal protocollo fastcgi o scgi):

1) richiesta riconosciuta come ufcgi 2) collegamento diretto al socket (senza fare verifiche o effettuare locking come nella versione 0.1)

in caso il punto 2 dia errore:

3) verifica tramite syscall 319 (per fastcgi) o 320 (per scgi) che l'applicazione sia in esecuzione

se il punto 3 restituisce 0 viene lanciata l'applicazione (utilizzando un semplice un file di lock per evitare che due richeiste concorrenti generino il doppio dei processi), altrimenti si tenta per 3 volte a intervalli di 1,2 e 3 secondi di ricollegarsi al socket. Se si continuano a ricevere errori la richiesta viene chiusa e se configurato dall'utente si restituisce un redirect alla url impostata in fastcgi_failover_url/scgi_failover_url

Se il punto 2 ha dato esito positivo, si costruisce la richiesta, la si invia al socket e si lancia una recv() con timeout impostato a fastcgi_socket_timeout/scgi_socket_timeout

In caso di timeout viene restituito un errore UFCGI o (se configurato) si effettua il redirect di failover.

Parametri di configurazione

Per ridurre al minimo la curva di apprendimento rispetto alle vecchie implementazioni fastcgi, abbiamo mantenuto gli stessi nomi ai parametri e ci siamo limitati ad aggiungerne di nuovi:

fastcgi_cmd => nome dell'applicazione fastcgi (estensione .fcg o .fcgi)

fastcgi_mode => tipo di redirect da utilizzare, dipende dall'applicazione, impostandolo a 0 (nessun redirect) e' possibile usare il mod_rewrite e costruire modelli di redirect piu' complessi

fastcgi_off => elenco di directory in cui disabilitare il protocollo fastcgi

fastcgi_socket_timeout => e' la prima opzione specifica di UFCGI, permette di definire con un intervallo dai 5 ai 30 secondi, il tempo massimo che una richiesta fastcgi puo' impiegare senza avere nessun tipo di risposta dall'applicazione (default: 10 secondi)

fastcgi_nfork => numero di processi da avviare per una stessa applicazione (da 1 a 3, default 1). Opzione specifica di UFCGI, nel caso di applicazioni multithread (flup,mono,zope3...) e' necessario impostare 1

fastcgi_send_script_name => Opzione specifica di UFCGI, permette di inviare le variabili SCRIPT_NAME e SCRIPT_FILENAME all'applicazione. Per adesso solo MONO sembra averne bisogno.

Errori

Un'applicazione ufcgi restituira' un errore sul browser (solo se non si e' impostato il fastcgi_failover_url/scgi_failover_url) in questi casi:

* L'applicazione non si e' avviata

* Si e' superato il (fastcgi|scgi)_socket_timeout

* L'applicazione ha restituito una risposta vuota

* L'applicazione ha chiuso il socket unix di comunicazione

UFCGI (l'ultima modifica รจ del 2008-03-19 12:39:43, fatta da RobertoDeIoris)