Enlaces e información
Comenta lo que creas oportuno.
Desplegando Rails
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.
te falta una “s” para ser yo