RUgD (Rails Ugly Dispatcher) e’ un webserver ultra-leggero
(completamente scritto in C) il cui unico scopo e’ quello di eseguire
applicazioni Rails.
E’ pensato per la fase di produzione e non per quella di sviluppo,
principalmente perche’ non dispone (e mai disporra’) di funzioni per
servire file statici.
La differenza sostanziale con mongrel/thin (oltre ad essere
completamente in c) e’ che usa il modello prefork, quindi N processi
saranno in ascolto sulla medesima porta TCP rendendo inutile l’uso di
proxy load balancer (se non, ovviamente in caso lanciate piu’ istanze di
rugd su macchine diverse).
Chi ha esperienza di deploy con mongrel_cluster sa che rottura di *@!#
sia rimettere mano alla configurazione di apache ogni volta che si
aggiungono processi a mongrel_cluster.
E’ ancora in una fase embrionale, ma applicazioni come typo e mephisto
girano senza problemi e con performance di tutto rispetto (i primi
benchmark blandi che ho fatto lo danno del 20% piu’ rapido di mongrel
nel parsing delle richieste, ma e’ tutto relativo visto che il parser
http di rugd non e’ ancora a prova di bomba).
Il consumo di memoria (esterno al motore ruby) e’ ridottissimo e conto
di diminuirlo ulteriormente migliorando i parser HTTP.
Nelle prossime revisioni conto di aggiungere un watcher inotify che
riavvii in automatico rails quando vengono fatte modifiche ai controller
o ai modelli, e un limitatore di utilizzo di memoria per evitare che una
app scritta male sdrai tutto il server (questo in realta’ e’ in cima
alla lista delle cose da fare)
I piu’ tecnici noteranno che l’ambiente ruby vive in un thread POSIX,
non preoccupatevi non c’e’ mai passaggio di oggetti tra il thread e il
webserver (altrimenti ruby si arrabierebbe di brutto), tutta la
comunicazione avviene tramite pipe().
Qui potete scaricare il trunk svn:
Purtroppo non ho avuto il tempo di preparare un Makefile decente, quindi
dovrete editarlo ed impostare la directory in cui avete gli header di
ruby (il default e’ una ubuntu x86-64).
Altra nota negativa e’ che per ora il tutto funziona solo sotto linux
2.6, ma conto di portarlo su BSD (incluso OSX) in breve tempo (magari
gia’ funziona, non ho provato).
Vi invito a testarlo ma non usarlo in ambienti di produzione poiche’ ci
sono ancora un paio di bug noiosi e inviando una richiesta http ad hoc
si potrebbe generare un deadlock.
Buona serata
P.S.
Ovviamente se qualcuno ha voglia di fare un porting su windows, si
faccia pure avanti
–
Roberto De Ioris
http://unbit.it
JID: [email protected]