2009-05-04 23 views
11

Sto configurando un server web Apache2 che esegue più applicazioni Web Ruby on Rails con Phusion Passenger. So che Passenger genera i processi Ruby per la gestione delle richieste. Ho le seguenti domande:In che modo Phusion Passenger riutilizza thread e processi?

  • Se più di una richiesta deve essere gestita allo stesso tempo, il Passenger genera più processi o più thread (Ruby)? Come lo configuro in modo tale da generare sempre processi a thread singolo?
  • Se ho due applicazioni Rails, immagina che una richiesta per l'app A vada al processo 1, poi arriva la richiesta per l'app B. È possibile che anche il processo 1 gestisca questa richiesta? Quando e come è possibile? In altre parole, un processo è autorizzato a gestire richieste per più applicazioni Rails?
  • Ho la stessa applicazione Rails esportata in più URL e più host virtuali (come http: // e https: //). Lo stesso processo sarà in grado di servire diversi host virtuali? (La risposta a questo sembra essere sì, ho impostato una variabile globale nel rispondere a una richiesta all'host virtuale A e sono riuscito a recuperare il valore nell'host virtuale B.)

risposta

12

In generale, Passeggero genera nuovi processi mediante la forking di un ApplicationSpawner, che ha il codice di framework e applicazione pre-caricato in memoria, o un FrameworkSpawner, che ha solo il codice framework.

Il passeggero, per quanto ne so, non si occupa di fili. Invece, quando il carico aumenta su un'applicazione, forgerà ApplicationSpawner dell'applicazione e inizializzerà un'altra istanza. Quando il carico diminuisce, una o più istanze dell'applicazione vengono eliminate.

Se il Passeggero è configurato in un certo modo (credo che scegliendo il metodo di generazione "intelligente"), creerà un FrameworkSpawner, che carica il codice di rotaie, ma nessun codice di applicazione, che può quindi essere biforcato per caricare e applicazione che utilizza quella versione di Rails.

Quindi, per rispondere alle vostre domande:

  • servirà loro in sequenza, quindi generare processi aggiuntivi qualora decida il carico è abbastanza alto.

  • No. Un processo può appartenere a una singola applicazione Rails.

  • Sono un po 'approssimativo su questo, ma il tuo esperimento ha un senso. Il passeggero dovrebbe essere abbastanza intelligente da capire che, anche se è in esecuzione da diversi punti della configurazione del server, stai parlando della stessa applicazione. Probabilmente si basa sul percorso del file system dell'applicazione.

EDIT: Sono andato a leggere un po 'su questo. Ho scoperto che avevo soprattutto ragione, ma i dettagli tecnici erano un po 'spenti. Vedi il Passenger documentation

+0

La versione a pagamento di Passenger ora ha la possibilità di generare thread e processi. – Kris

6

Yup, Burke ha ragione. In caso di terza domanda, Phusion Passenger riconosce le applicazioni tramite il loro percorso root dell'applicazione. Quindi, anche se hai due host virtuali, se entrambi puntano allo stesso DocumentRoot, Phusion Passenger penserà che siano la stessa app.

Problemi correlati