Alternativa a apache + blanceador de carga en windows?

Que tal lista,

Hace unos meses hice una aplicacion en Rails y como en la empresa no
habia
un server dedicado para ella me prestaron espacio en un server
Windows2003.
Alli hay otra aplicacion hecha en .Net con IIS .

Asi que no usé apache, solamente mongrel en ambiente de producción. Pero
con
el tiempo los usuarios la usan mas seguido y a veces hay problemas en
los
tiempos de respuesta.

Tengo otra aplicacion en un server linux y esa si esta con todas las de
ley.
Apache con proxy, balanceador de carga y 4 instancias mongrel.

Pero la que está en windows tendra que seguir por un tiempo mas alli.
Hay
alguna manera de hacer algo parecido en Windows como en Linux?

He probado migrando a jruby y usando glassfish_rails pero el rendimiento
me
ha decepcionado.
Ahora estoy probando el nuevo Jetty_Rails. Me ha sorprendido gratamente.
Se
lo instala como cualquier gem. Asi que tengo el webserver (Jetty), Rack
(viene incluido), y mi aplicacion. Aunque no he visto en internet alguna
explicacion grafica de si hace o no varias instancias como lo hago en
linux,
me gustaria saber si hay algo mejor que se pueda hacer.

Gracias,

On Sat, Jun 7, 2008 at 17:34, Alex R. [email protected] wrote:

Tengo otra aplicacion en un server linux y esa si esta con todas las de ley.
explicacion grafica de si hace o no varias instancias como lo hago en linux,
me gustaria saber si hay algo mejor que se pueda hacer.

Gracias,

Hay un capítulo bastante interesante en el libro Deploying Rails
Applications sobre el deploying en Windows. Por si no lo tienes, hago
un pequeño resumen.

Me divierte/asusta que una de los primeros consejos que te da para
hacer un deploy en Windows, que puede ser mucho más eficiente que
cualquier otra cosa, es montar una máquina virtual con Linux y hacer
que los Mongrel y el servidor web/balanceo de carga estén dentro de la
máquina virtual, con un proxy en Windows para enviar las peticiones de
los clientes a la máquina virtual. Ventajas que destaca son la
velocidad de ejecución de Ruby en Linux (que parece ser que a pesar de
ejecutarse en una máquina virtual, puede llegar a ser más rápido que
Ruby nativo), y que es muy sencillo hacer una migración a una máquina
Linux posteriormente.

Pero si tienes que hacer el deploy en Windows nativo (y no puedes
contar con Apache 2) el camino que sigue es varios Mongrel corriendo
como servicios de Windows en varios puertos diferentes, y hacer el
balanceo con Pen http://siag.nu/pen/, que en algunas versiones tiene
binarios para Windows (y supongo que se podrá compilar, si te pones).
Para correr Pen como servicio de Windows, te dice de bajarse el
Windows 2003 Server Resource Kit y utilizar instsvr.exe y svrany.exe
para crear el servicio (busca en Google, estas herramientas están muy
explicadas).

Tuve que hacer un deploy de una aplicación Rails en Windows y creo que
intentaré no hacerlo nunca más. Pero eso sí, aprendes a optimizar
mucho tu aplicación, y hacer caching de todo lo que puedas para que
(casi) ninguna petición toque a Rails/Ruby. Mi deploy final era Apache
1.3 haciendo de proxy hacia un único Mongrel (a los usuarios parece
bastarles), donde Mongrel también sirve la parte estática del sitio
(únicamente con mod_rewrite de Apache 1.3 no conseguí que sirviera e
hiciera de proxy en las mismas URL). Por cierto, antes de esta
configuración pasamos por FastCGI, pero eso era imposible de utilizar.
Al final creo que va a 1req/s, pero no he oido protestas.

Para quienes lo de 1req/s les sorprenda: Pentium III a 533GHz con
(creo) 256 MB RAM, Windows 2000 Server, un antivirus corriendo, un
firewall, un Tomcat, y alguna cosa más… sí, me gustan los retos (una
gente bastante “ahorradora”, digamos). Un ordenador parecido, pero con
Linux ha ejecutado todo feliz aplicaciones de Rails sin inmutarse (y
con FastCGI).

Moraleja: en cuanto puedas mueve tu aplicación a Linux y sé feliz.

Bai.

a día de hoy tienes otra alternativa multiplataforma… puedes usar
jruby y desplegar tu aplicación en un contenedor de servlets estándar.

eso sí… si utilizas gemas u otras extensiones que no estén incluídas
dentro del directorio vendor, tendrás que instalarlas sobre jruby antes
de poder arrancar tu servidor así

hola,

Hay un capítulo bastante interesante en el libro Deploying Rails
Applications sobre el deploying en Windows. Por si no lo tienes, hago
un pequeño resumen.

a día de hoy tienes otra alternativa multiplataforma… puedes usar jruby
y desplegar tu aplicación en un contenedor de servlets estándar. La
opción más sencilla es instalar jruby (bajas el zip, lo descomprimes y
ya está, con el único requisito de tener una JVM instalada) luego
instalarte la gema glassfish, y ya está. Una vez hecho eso haces

jruby -S glassfish_rails -n 4

Y directamente te levanta un servidor glassfish que te soporta 4
peticiones simultáneas. Eso es el equivalente a montar un apache/Pen
balanceando a 4 mongrels. El balanceo lo hace el propio glassfish, así
que no necesitas configurar un servidor web + balanceador por delante
que haga de proxy para tu servidor rails. Directamente glassfish se
ocupa de todo. Puedes incluso configurarte un pool de conexiones jdbc si
te interesa.

Esa solución tiene como ventaja adicional que funciona exactamente igual
en windows que en linux. La única pega que tiene ahora mismo es que para
cambiar el número de puerto la gema todavía no trae opción y hay que
cambiar el fichero de configuración a mano. Siempre puedes instalar
glassfish completo (no sólo la gema) y desplegar tu aplicación ahí, pero
eso ya lleva algún paso adicional.

En cuanto a rendimiento, los números de jruby 1.1.2 son bastante buenos,
aunque sobre windows y todo eso ya no lo tengo claro y sería cuestión de
comparar… pero funcionar funciona.

saludos,

javier ramírez

2008/6/7 javier ramirez [email protected]:

a día de hoy tienes otra alternativa multiplataforma… puedes usar jruby
y desplegar tu aplicación en un contenedor de servlets estándar. La
opción más sencilla es instalar jruby (bajas el zip, lo descomprimes y
ya está, con el único requisito de tener una JVM instalada) luego
instalarte la gema glassfish, y ya está. Una vez hecho eso haces

jruby -S glassfish_rails -n 4

Pues usar glassfish_rails fue lo primero que hice. Como el server windows
es un quad core hice justo lo que indicas, ejecuté 4 instancias. Imaginé
que
con eso tenia solucionado mis problemas, pero no. El rendimiento fue
similar
a 1 instancia mongrel en ambiente de producción.

Fue cuando Jetty_Rails llegó al rescate. Estaba desespetado por el
rendimiento tan pobre de la aplicación en Windows que decidí intentar
cualquier otra cosa. Lei de Jetty_Rails apenas un dia antes y sin
pensarlo 2
veces lo instalé.

Hasta ahora va de lujo. Sirve el contenido estatico muy rapido. Y se lo
ejecuta de manera similar a mongrel incluso indicando el ambiente de
ejecucion (development, production,…).
Pero como es tan nuevo no he encontrado mucha documentacion de él al
respecto. Se que es un webserver que mediante la interfase Rack se
comunica
con mi aplicacion. Pero no se cuantas instancias de la aplicacion
ejecuta o
como se configura eso.

hola,

Pero como es tan nuevo no he encontrado mucha documentacion de él al
respecto. Se que es un webserver que mediante la interfase Rack se
comunica con mi aplicacion. Pero no se cuantas instancias de la
aplicacion ejecuta o como se configura eso.

yo lo miré muy poco, pero como dices funciona sobre rack, que es
realmente el que implementa el servlet que ejecuta la aplicación.
Mirando el fuente de rack aquí
http://svn.codehaus.org/jruby-contrib/trunk/rack/src/main/java/org/jruby/rack/PoolingRackApplicationFactory.java
puedes ver que por defecto te va a atender 4 peticiones simultáneas, y
podrías modificar el web.xml para cambiar el tamaño del pool disponible.

saludos,

javier ramírez