2009-05-04 16 views
11

Estoy configurando un servidor web Apache2 que ejecuta múltiples aplicaciones web de Ruby on Rails con Phusion Passenger. Sé que Passenger engendra procesos de Ruby para el manejo de solicitudes. Tengo las siguientes preguntas:¿De qué manera Phusion Passenger reutiliza hilos y procesos?

  • Si se tiene que manejar más de una solicitud al mismo tiempo, ¿Passenger generará múltiples procesos o múltiples hilos (Ruby)? ¿Cómo lo configuro para que siempre genere procesos de subproceso único?
  • Si tengo dos aplicaciones de Rails, imagine que una solicitud de la aplicación A va al proceso 1, luego la solicitud para la aplicación B llega. ¿Es posible que el proceso 1 también se encargue de esta solicitud? ¿Cuándo y cómo es esto posible? En otras palabras, ¿se permite que un proceso maneje solicitudes para múltiples aplicaciones de Rails?
  • Tengo la misma aplicación de Rails exportada en varias URL y varios hosts virtuales (como http: // y https: //). ¿El mismo proceso podrá servir a diferentes hosts virtuales? (La respuesta parece ser sí, he establecido una variable global al responder una solicitud al host virtual A, y pude recuperar el valor en el host virtual B.)

Respuesta

12

En general, pasajeros genera nuevos procesos bifurcando un ApplicationSpawner, que tiene el código de marco y aplicación precargado en la memoria, o un FrameworkSpawner, que solo tiene el código de framework.

Pasajero, hasta donde yo sé, no se ocupa de los hilos. En cambio, a medida que aumenta la carga en una aplicación, se bifurcará ApplicationSpawner de esa Aplicación e inicializará otra instancia. Cuando la carga disminuye, una o más instancias de aplicación mueren.

Si Passenger está configurado de una determinada manera (creo eligiendo el método de generación "inteligente"), creará un FrameworkSpawner, que carga el código de carriles, pero no el código de aplicación, que luego puede bifurcarse para cargar y aplicación utilizando esa versión de Rails.

Así que para responder a sus preguntas:

  • Servirá de forma secuencial, a continuación, generar procesos adicionales que decida que la carga es lo suficientemente alto.

  • No. Un proceso solo puede pertenecer a una única aplicación de Rails.

  • Estoy algo incompleto en este caso, pero su experimento tiene sentido. El pasajero debe ser lo suficientemente inteligente como para darse cuenta de que, aunque se ejecuta desde diferentes lugares en la configuración del servidor, está hablando de la misma aplicación. Probablemente se basa en la ruta del sistema de archivos de la aplicación.

EDIT: Fui y leí sobre esto un poco. Resulta que estaba en lo cierto, pero los detalles técnicos estaban un poco desajustados. Ver el Passenger documentation

+0

La versión paga de Passenger ahora tiene la opción de engendrar hilos y procesos. – Kris

6

Sí, Burke tiene razón. En el caso de la tercera pregunta, Phusion Passenger reconoce las aplicaciones por su ruta raíz de aplicación. Entonces, incluso si tiene dos hosts virtuales, si ambos apuntan al mismo DocumentRoot, Phusion Passenger pensará que son la misma aplicación.

Cuestiones relacionadas