2009-05-04 8 views
11

Je configure un serveur web Apache2 exécutant plusieurs applications web Ruby on Rails avec Phusion Passenger. Je sais que Passenger engendre des processus Ruby pour traiter les demandes. J'ai les questions suivantes:Comment Phusion Passenger réutilise-t-il les fils et les processus?

  • Si plus d'une demande doit être traitée en même temps, le passager engendrera-t-il plusieurs processus ou plusieurs threads (Ruby)? Comment est-ce que je le configure afin qu'il engendre toujours des processus mono-thread?
  • Si j'ai deux applications Rails, j'imagine qu'une requête pour l'application A va au processus 1, alors la demande de l'application B arrive plus tard. Est-il possible que le processus 1 traite également cette demande? Quand et comment est-ce possible? En d'autres termes, un processus est-il autorisé à gérer les demandes pour plusieurs applications Rails?
  • J'ai la même application Rails exportée dans plusieurs URL et plusieurs hôtes virtuels (tels que http: // et https: //). Le même processus sera-t-il capable de servir différents hôtes virtuels? (La réponse à cette question semble être oui, j'ai défini une variable globale en répondant à une requête à l'hôte virtuel A, et j'ai pu récupérer la valeur dans l'hôte virtuel B.)

Répondre

12

En général, Passager génère de nouveaux processus en forçant un ApplicationSpawner, dont le cadre et le code de l'application sont préchargés en mémoire, ou un FrameworkSpawner, qui a juste le code du framework.

Passager, autant que je sache, ne traite pas dans les discussions. Au lieu de cela, au fur et à mesure que la charge augmente sur une application, elle va croiser ApplicationSpawner de cette application et initialiser une autre instance. Lorsque la charge diminue, une ou plusieurs instances d'application sont supprimées. Si Passenger est configuré d'une certaine manière (je crois en choisissant la méthode spawn "intelligente"), il créera un FrameworkSpawner, qui charge le code rails, mais aucun code d'application, qui peut ensuite être forké pour charger et application en utilisant cette version de Rails.

Donc, pour répondre à vos questions:

  • Il leur servira successivement, puis reproduire des processus supplémentaires si elle décide de la charge est suffisamment élevée. Un processus ne peut appartenir qu'à une seule application Rails.

  • Je suis un peu schématique sur celui-ci, mais votre expérience est logique. Passenger devrait être assez intelligent pour comprendre que même s'il fonctionne depuis différents endroits dans la configuration du serveur, vous parlez de la même application. C'est probablement basé sur le chemin du système de fichiers de l'application.

EDIT: Je suis allé lire un peu à ce sujet. Il s'est avéré que j'avais surtout raison, mais les détails techniques étaient un peu off. Voir le Passenger documentation

+0

La version payante de Passenger a désormais la possibilité de générer des threads et des processus. – Kris

6

Ouup, Burke a raison. Dans le cas de la troisième question, Phusion Passenger reconnaît les applications par leur chemin racine d'application. Donc, même si vous avez deux hôtes virtuels, s'ils pointent tous les deux vers le même DocumentRoot, Phusion Passenger pense qu'il s'agit de la même application.

Questions connexes