2010-05-30 12 views
21

Estoy tratando de implementar mi pequeña aplicación web Catalyst usando Plack/Starman. Toda la documentación parece sugerir que quiero usar esto en combinación con nginx. ¿Cuáles son los beneficios de esto? ¿Por qué no utilizar Starman directamente en el puerto 80?¿Por qué utilizar nginx con Catalyst/Plack/Starman?

Respuesta

34

No tiene por qué ser nginx en particular, pero quiere algún tipo de proxy servidor anticipado a su servidor de aplicaciones por varias razones:

  1. Así que puede ejecutar el servidor en un catalizador puerto alto, como usuario normal, mientras ejecuta el servidor frontend en el puerto 80.

  2. Para servir archivos estáticos (recursos comunes como imágenes, JS y CSS, así como cualquier tipo de descarga que desee usar X -Sendfile o X-Accel-Redirect con) sin bloquear un proceso de perl durante la descarga.

  3. Hace las cosas más fáciles si desea pasar a una configuración más complicada que implica, p. Edge Side Includes, o hacer que el servidor web sirva directamente desde memcached o mogilefs (ambas cosas que nginx puede hacer), o una configuración de equilibrio de carga/HA.

+0

Tengo una pregunta de seguimiento, Hobbs: si estás usando un framework como Dancer o Catalyst, ¿para qué necesitas starman? ¿No podría simplemente enviar la solicitud al servidor predeterminado provisto por Plack/Dancer? –

+2

@Vijay El servidor predeterminado utilizado por Dancer, y por Catalyst si ejecuta el script del servidor sin las opciones '-f' o' -k', solo puede manejar una sola solicitud a la vez, por lo que no es tan bueno para la producción. Por otro lado, si ejecuta el script del servidor de Catalyst con '-f', lo que usa es Starman :) – hobbs

+1

¡Ah, excelente! Eso finalmente aclara lo último que estaba tratando de entender.Escribí mi explicación para la pila nginx/starman/dancer aquí (si tienes algún comentario/idea adicional que me perdí, realmente los agradecería): http://stackoverflow.com/questions/12127566/an-explanation -de-la-nginx-starman-bailarina-web-pila –

9

hice esta pregunta en #plack y tiene la siguiente respuesta del @nothingmuch (I agregado formato):

Con nginx puede configurar loadbalancing tipo/conmutación por error material. Si el sitio es pequeño/simple podría ser overkill.

No conozco ninguna desventaja de que Starman podría tener. Quizás si tiene muchas visitas en archivos estáticos nginx usaría menos cpu/memory para manejarlas, pero es poco probable que sea significativo en una aplicación web típica . Grandes descargas pueden atar a los trabajadores de Starman para el archivo estático descargas sin embargo. (Tal vez no, con sendfile.) Eso es todo lo que puedo pensar.

... Una configuración de conmutación por error puede bueno si usted quiere hacer actualizaciones sin tiempo de inactividad. ("Fail" la vieja versión .)

3

Otra razón es que un servidor anticipado ligero (incluso Apache está bien) consume mucha menos memoria por conexión de un proceso típico Starman (un par de decenas o MB vs. más de 100 MB). Dado que la conexión está abierta durante un tiempo, especialmente si desea utilizar conexiones keep-alive, puede admitir una gran cantidad de conexiones simultáneas con mucha menos memoria RAM. Solo asegúrese de que el tamaño del búfer del servidor de la interfaz de proxys sea lo suficientemente grande como para cargar una respuesta HTTP típica inmediatamente desde el back-end. Entonces el backend es libre de procesar la próxima solicitud.

Cuestiones relacionadas