Desplegando Rails

Escrito por Roberto M. Oliva el Abril 16th, 2008

Llevamos más de año y medio metidos en un mega-proyecto basado en Ruby On Rails. Después de tanto tiempo tenemos una visión muy clara de las ventajas e inconvenientes de utilizar esta plataforma. Ya hay muchos sitios en los que se habla de estas consideraciones y de muchas otras, pero yo quiero exponer aquí el que probablemente haya sido el mayor problema con el que nos hemos encontrado: El despliegue.

Siguiendo en paralelo esta entrada hemos pasado por todos las arquitecturas posibles de aplicaciones Rails, bueno nos saltamos el FastCGI:

  • Apache con mod_balancer
  • Nginx con fair
  • Mongrel
  • Thin

Muchas, muchas horas invertidas con problemas de estabilidad, rendimiento, conexión a la base de datos defectuosa, etc, etc.
No hemos llegado todavia al paso de implementar HAProxy, aunque todo de andará. Pero con un nginx con fair, un stack de 10 thines y una buena máquina sirviendo el MySql, parece que nos hemos ganado un poco de tranquilidad.

Tenemos en plan crear dos máquinas virtualizadas con un stack de mongreles en cada una y el nginx que balancee a ambas. Esta arquitectura tiene que escalar hasta dos máquinas con cuatro stack de thines virtualizados cada una, lo que nos dará 80 thines dispuestos en paralelo, mejor balanceo de carga y una mayor tolerancia a fallos. Posiblemente tendremos que replicar la base de datos porque seguramente pasaremos el cuello de botella a ese extremo.

Por si sirven los siguientes datos, sacados de varios sitios web, entre ellos el de: Ezra Zygmuntowicz. Teniendo en cuenta:
- reqs: Request per second. Son el número de peticiones que se harán por segundo.
- tm: Tiempo medio de respuesta de cada petición.

El número de mongreles necesarios serán: reqs * tm. A su vez, se recomienda 8 mongreles por núcleo de CPU, con esto también nos permite obtener cuantos servidores necesitamos.
Por ejemplo: Si necesitamos servir 100 request por segundo y cada request toma una media de 0,5 segundos en ser enviada, necesitaríamos 50 mongreles. Una máquina QuadCore podría tener 32 mongreles, con lo que necesitaríamos 2 máquinas. Esto sin contar con el consumo de memoria RAM de la máquina. Si un mongrel consume unos 60Mb de RAM, para 32 mongreles necesitaríamos algo menos de 2Gb de RAM en la máquina.

Después de toda esta disquisición, voy a comentar en este y en sucesivos posts un nuevo chico en la ciudad (como se suele decir en inglés), se denomina: Phusion Passenger. Como todos los que comienzan promete todo: Gran velocidad, estabilidad, mucha documentación. Pero esta solución promete algo mejor y es virtual hosting de Rails con configuración cero.

Para desplegar un sitio Rails, aparte de saber programar ;), había que saber desplegar toda la arquitectura, vamos, lo que he comentado antes (nginx, mongreles, etc). Con modrail esto se acaba: Subes los ficheros de la aplicación Rails al directorio que atiende el virtual host y ya está funcionando.

He estado instalándolo en un servidor en el que tenemos varias aplicaciones Rails. La instalación ha sido bastante fácil: Una gema, un script de configuración y unas variables en el apache2.conf. Después de esto y, como por arte de magia, tenemos una aplicación rails corriendo en un virtual host sin tener que preouparnos por los mongreles ni por los balanceos de carga.

Cuando viene algo nuevo, suelo ser bastante excépctico. Todavía queda mucho camino por recorrer: A Ruby (Rubinius por ejemplo), a Rails y, en este caso, a modrails.

Escritos anteriores

Retomando…

Escrito por Roberto M. Oliva el Abril 1st, 2008

La importancia del testing

Escrito por Roberto M. Oliva el Noviembre 26th, 2007

Flex: Mostrar imágen desde un servicio XML

Escrito por Roberto M. Oliva el Julio 30th, 2007

Apuntes para RJS

Escrito por Roberto M. Oliva el Julio 30th, 2007

Este camino se acabará algún día?

Escrito por Roberto M. Oliva el Junio 29th, 2007

Ayuda a la depuración

Escrito por Roberto M. Oliva el Junio 11th, 2007

Microsoft Silverlight

Escrito por Roberto M. Oliva el Mayo 8th, 2007

Flex: Filtrar datos XML a mostrar en un Datagrid

Escrito por Roberto M. Oliva el Abril 19th, 2007

A vueltas con las fixtures

Escrito por Roberto M. Oliva el Abril 4th, 2007

Bienvenido a mi blog.

Gracias por visitarla. Date una vuelta y mira a ver si te interesa lo que escribo. Por supuesto que me gustaría conocer tu opinión, así que siéntete libre de poner tus comentarios. Espero que te guste!