2012-10-27 7 views
8

Mi sono divertito a valutare le altre opzioni sul server WEBrick predefinito di Rails e Thin è stata la cosa più indolore e pulita che ha funzionato molto bene !!Quale di questi è un'opzione migliore da utilizzare insieme all'applicazione "ultime rotaie"? Mongrel, Thin, WEBrick e Passenger

quale di questi Mongrel, Thin, WEBrick e Passeggero consiglieresti e perché ..? ci sono dei vantaggi per la scalabilità (cluster friendly o configs che possono gestire una sorta di scala) forniti con uno di questi server .. o la scalabilità potrebbe anche essere un parametro durante la loro valutazione?

risposta

9

Dipak già risposto la metà della tua domanda, ma mi permetta di chiarire su cose un po '. (Sono uno degli autori di Phusion Passenger.)

  • WEBrick è un server Web giocattolo. Nessuno lo usa in niente se non lo sviluppo perché si comporta male e si dice che perde memoria.
  • Hai detto che Thin ha funzionato bene. Lo hai già configurato in una configurazione di proxy inverso? Perché questo è ciò che le persone fanno negli scenari di produzione. Non è sicuro esporre Thin (o Mongrel o Unicorn) direttamente a Internet.
  • Potresti essere interessato a leggere Ruby on Rails server options e the Phusion Passenger architectural overview per ulteriori spiegazioni dettagliate.

Quando si parla di scalabilità, non c'è molta differenza. Esse si comportano tutte in modo molto simile nella produzione, tutte scalano all'incirca nello stesso modo, e tutti i problemi che incontrerai saranno probabilmente causati dalla tua app o da Rails. Bene, ad eccezione di WEBrick, che non dovresti usare in produzione. Potresti vedere la differenza nei cenni di benchmark mondiale, ma sarà tutto. Nell'ambito della produzione, la maggior parte del tempo verrà utilizzata nell'app, quindi qualsiasi minima differenza di velocità visibile in tutti i benchmark del mondo diventerà completamente invisibile.

Tuttavia ci sono alcune sottigliezze da tenere presente.

  • Phusion Passenger fornisce una funzionalità chiamata accodamento globale. Risolve un problema specifico, explained in detail in the manual. Per impostazione predefinita, le richieste di proxy Nginx e Apache vengono eseguite in modalità round-robin, quindi soffrono di questo problema, mentre Phusion Passenger non lo fa. Ci sono modi per aggirare questo problema quando non si utilizza Phusion Passenger ma richiedono una configurazione specifica o l'installazione di moduli aggiuntivi del server web.
  • Il modello I/O può o non può essere importante in base alla natura dell'applicazione. Mongrel, Thin, Unicorn, sono tutti multi-processo single-threaded. Funziona perfettamente per le app Web tradizionali che cercano elementi nel database locale e restituiscono qualcosa, ma fanno più schifo per le app che eseguono molte chiamate API HTTP o che devono attendere molto sull'I/O. Why Rails 4 Live Streaming is a Big Deal spiega questo in dettaglio.

    Phusion Passenger è anche multi-processo a thread singolo, ma Phusion Passenger Enterprise supporta il multithreading. Phusion Passenger Enterprise è una variante commerciale del Phusion Passenger open source, con una varietà di funzionalità utili per ambienti di produzione su larga scala.

  • In ambienti di produzione di grandi dimensioni, alcune funzioni diventano importanti, ad es. il riavvio si riavvia, non mostra nulla di sbagliato quando una distribuzione fallisce, ecc. Mongrel, Thin, Unicorn, Phusion Passenger, espongono tutti questi aspetti in una certa misura, ma alcuni richiedono più sforzi di amministrazione rispetto ad altri. Ad esempio, per implementare riavvii in modalità Rolling in Mongrel e Thin, sono necessari molti passaggi negli script di distribuzione. L'unicorno non richiede tanti passaggi, ma ancora significativamente. È qui che splende Phusion Passenger Enterprise: prende tutte queste funzionalità e le trasforma in un'unica opzione di configurazione. Attiva l'opzione e il software si occupa del resto.

Quindi, scegli l'opzione che ritieni migliore per il tuo scenario.

+0

è stato via per un po 'di tempo .. grazie per l'ottima risposta .. ho iniziato a usare passenger + nginx sin da ora ... il i requisiti non sono così straordinari e quindi la scalabilità non è stata un problema !! grazie ancora !! – brucewayne

+0

@Hongli Ho un'applicazione Rails che fa un uso estensivo della gemma Faye ruby, che a sua volta fa un ampio uso di websocket e comet (lunghi polling HTTP). In altre parole, ho centinaia di connessioni TCP che rimangono aperte per lunghi periodi di tempo. Varie parti del sito utilizzano dati in tempo reale. Inizialmente stavo usando Apache2 ma sto decidendo di migrare a nginx a causa della sua forza multi-threaded i/o asincrona. Will Passenger gioca meglio di Thin come server di applicazioni? – Donato

+0

@Donato Se usi WebSockets, Passenger Enterprise (per il multithreading) con Nginx funzionerà molto bene, proprio come Thin. Il vantaggio principale di Passenger Enterprise rispetto a Thin è rappresentato da strumenti migliori e documentazione migliore. Inoltre, si prega di controllare le [istruzioni di ottimizzazione WebSocket] (https://www.phusionpassenger.com/library/config/nginx/tuning_sse_and_websockets.html). – Hongli

1

Il più facile da configurare per la produzione sarà probabilmente Apache e mod_rails (passeggero). Se vuoi usare la nuova hotness, potresti dare a nginx e ai passeggeri un vortice.

Per lo sviluppo bastardo è solitamente il più facile da lavorare. La maggior parte degli IDE di Windows (RadRails, Netbeans) ti danno la possibilità di usare Webrick o Mongrel per il lavoro di sviluppo e ti permettono di controllare i server dall'IDE stesso.

Aggiornamento

quattro scelte

Ci sono davvero quattro scelte, così, più WEBrick, ma che sarebbe una scelta insolita per un server di produzione. Circa in ordine crescente di complessità ...

nginx + Mongrel nginx + passeggero Apache + Mongrel Apache + Passenger (C'è Phusion Standalone passeggeri, ma questo è davvero un nginx + passeggero compilato insieme, quindi sono non contando, anche se potrebbe essere una buona opzione per alcune persone.)

Un sito più grande può quindi aggiungere hardware di livello 7 specializzato (NetScaler, F5, ...) davanti ai server.

+0

grazie per la risposta .. questo è più per scopi non di sviluppo .. penso che darò a nginx un tentativo .. qualche intuizione sulla seconda domanda ..? – brucewayne

+0

Non sono d'accordo con la tua scelta sull'ordine di complessità. Phusion Passenger + Apache e Phusion Passenger + Nginx sono circa la stessa complessità, usabilità-saggio. Ma entrambi sono meno complessi di usabilità rispetto ad Apache/Nginx + Mongrel. Phusion Passenger Standalone dovrebbe essere il più semplice di tutti perché è solo un singolo comando, non c'è bisogno di compilare Nginx da solo, e il risultato può essere immediatamente esposto a Internet. Inoltre, Phusion Passenger + Nginx non è "la nuova hotness" - è in giro dal 2009. – Hongli

0

Thin è facile come gemma 'sottile' per lo sviluppo e la produzione

Problemi correlati