2010-05-30 7 views
21

J'essaie de déployer ma petite application web Catalyst en utilisant Plack/Starman. Toute la documentation semble suggérer que je veux l'utiliser en combinaison avec nginx. Quels sont les avantages de cela? Pourquoi ne pas utiliser Starman directement sur le port 80?Pourquoi utiliser nginx avec Catalyst/Plack/Starman?

Répondre

34

Il n'a pas à être nginx en particulier, mais vous voulez une sorte de mandatement du serveur frontend à votre serveur d'applications pour quelques raisons:

  1. Alors que vous pouvez exécuter le serveur Catalyst sur un Port élevé, en tant qu'utilisateur ordinaire, lors de l'exécution du serveur frontal sur le port 80.

  2. Pour diffuser des fichiers statiques (ressources ordinaires telles que des images, JS et CSS, ainsi que tout type de téléchargement, vous pouvez utiliser X -Sendfile ou X-Accel-Redirect avec) sans attacher un processus perl pendant la durée du téléchargement.

  3. Cela rend les choses plus faciles si vous voulez passer à une config plus complexe impliquant, par ex. Edge Side Inclut, ou que le serveur web serve directement depuis memcached ou mogilefs (les deux choses que nginx peut faire), ou une configuration d'équilibrage de charge/HA.

+0

J'ai une question de suivi, Hobbs: si vous utilisez un framework tel que Dancer ou Catalyst, pourquoi avez-vous besoin de starman? Ne pourriez-vous pas simplement envoyer la requête au serveur par défaut fourni par Plack/Dancer? –

+2

@Vijay Le serveur par défaut utilisé par Dancer, et par Catalyst si vous exécutez le script serveur sans les options '-f' ou' -k', ne peut gérer qu'une seule requête à la fois, donc ce n'est pas génial pour la production. D'un autre côté, si vous lancez le script du serveur Catalyst avec '-f', ce qu'il utilise est Starman :) – hobbs

+1

Ah, excellent! Cela clarifie finalement la dernière chose que j'essayais de comprendre.J'ai écrit mon explication pour la pile nginx/starman/dancer ici (si vous avez des commentaires/idées supplémentaires que j'ai raté, je les apprécierais vraiment): http://stackoverflow.com/questions/12127566/an-explanation -de-la-nginx-starman-dancer-web-stack –

9

J'ai posé cette question sur #plack et a obtenu la réponse suivante @nothingmuch (j'ai ajouté le formatage):

Avec nginx, vous pouvez configurer loadbalancing/stuff type de basculement. Si le site est petit/simple, il pourrait être overkill.

Je ne connais aucun des inconvénients de que pourrait avoir Starman. Peut-être que si vous avez beaucoup de hits sur fichiers statiques nginx utiliserait moins cpu/mémoire pour les gérer, mais c'est peu probable d'être significatif dans une application web typique . De gros téléchargements pourraient amarrer les travailleurs Starman pour le fichier statique téléchargements si. (Peut-être pas, avec sendfile.) C'est à peu près tout ce que je peux penser.

... Une configuration de basculement peut être agréable si vous voulez faire des mises à niveau sans temps d'arrêt. (« Fail » l'ancienne version .)

3

Une autre raison est qu'un serveur frontend léger (même Apache est OK) consomme moins de mémoire par connexion à un processus Starman typique (quelques Mo par rapport à des dizaines ou plus de 100 Mo). Comme une connexion est ouverte depuis un certain temps, en particulier si vous souhaitez utiliser des connexions persistantes, vous pouvez prendre en charge un grand nombre de connexions simultanées avec beaucoup moins de RAM. Assurez-vous seulement que la taille de la mémoire tampon du serveur frontal proxy est suffisamment grande pour charger une réponse HTTP typique immédiatement à partir du backend. Ensuite, le backend est libre de traiter la demande suivante.