Enlaces e información

Comenta lo que creas oportuno.


Otros posts
Flex: Atendiendo a la finalizacion de comandos
Retomando…

Desplegando Rails

Escrito por Roberto M. Oliva en 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.



Escriba un comentario

Dediquele un momento a comentar lo que piensa. Esta permitido usar HTML básico para formatear el escrito.

Comentarios de los lectores

te falta una “s” para ser yo

Hola Roberto, necesito hacerte una consulta personal sobre una persona que conocemos. He intentando averiguar tu e-mail y no lo he conseguido, a si que, por favor, envíame un correo a la dirección indicada y te contestaré. Muy agradecido. Un saludo.