Si eres nuevo en Rails, asegúrate de consultar nuestro tutorial sobre cómo empezar a usar el popular marco de trabajo.
Así que has terminado tu aplicación y ahora quieres hacerla accesible a todo el mundo en el maravilloso y salvaje mundo de Internet. Para ello, tendrás que desplegarla usando un proveedor de servicios de hosting para tu aplicación. Por suerte, hay algunas opciones para elegir, dependiendo de las prioridades de sus necesidades o de las necesidades anticipadas de sus usuarios.
Tecnologías de nubes y VPNs
En los términos más básicos, las tecnologías de nubes (o computación en nube) se refieren a los medios para desarrollar, probar y almacenar código y datos – y acceder a ellos a través de Internet en lugar de mantener todo almacenado en su disco duro local. En otras palabras, «nube» es otra forma de decir Internet. La computación en nube incluye el desarrollo de aplicaciones en las que los datos de la aplicación se sincronizan con otra información a través de Internet. Los ejemplos incluyen cosas como el software como servicio (SaaS) y la plataforma como servicio (PaaS). Salesforce.com es un ejemplo de computación en nube en el que una empresa se suscribe a una aplicación que se implementa en directo en Internet. Entre los ejemplos de PaaS se incluyen Appendra para desarrolladores de .NET y Java, o Red Hat OpenShift.
Por otra parte, una red privada virtual (VPN) es un método para añadir una capa de seguridad y privacidad tanto a las redes privadas como a las públicas, como los puntos de acceso WiFi e Internet. Las VPN son utilizadas principalmente por las empresas para proteger datos sensibles como los registros médicos, que están sujetos a las normas de la HIPPA.
Heroku, AWS y Océano Digital
Lo que necesita de un proveedor de hospedaje determinará la forma de desplegar su aplicación. Se están poniendo a disposición nuevas opciones a medida que Ruby on Rails gana popularidad para el desarrollo de aplicaciones web, pero para los actuales desarrolladores de Ruby on Rails hay tres proveedores de alojamiento principales (que son plataformas en la nube). Estos incluyen AWS, Digital Ocean y Heroku. Echemos un vistazo a los pros y los contras de cada uno de ellos.
Precios
Heroku es muy popular en la comunidad Ruby y ofrece un nivel de inicio gratuito que no puede ser superado por el desarrollador que está empezando. Obtienes una instancia de Linux (o contenedor), llamada «banco de pruebas» para tu aplicación y, de nuevo, es gratis. No es un mal negocio para los futuros desarrolladores de software que sólo quieren alojar un sitio web que muestre su portafolio de desarrolladores. Pero cuidado: Una vez que llegues al límite, Heroku te devolverá el golpe con un reinicio fuerte (sin advertencia), lo cual no es bueno para ninguna aplicación web.
AWS también tiene un nivel gratuito, el Amazon EC2 t2.micro, pero sólo sirve para un período introductorio de 12 meses, siempre y cuando te inscribas. Después de que el período inicial expire, o después de que su uso exceda las 750 horas por mes, su tarjeta bancaria o de crédito será facturada.
DigitalOcean no tiene cuentas gratuitas de inicio, sin embargo, el precio comienza en alrededor de 5 dólares por mes (no hay cargos ocultos para los complementos y las direcciones IP fijas). El plan más popular de DigitalOcean para un contenedor de Linux (o «gota») ofrece 1 GB de memoria, 1 procesador central, 30 GB de disco SSD y 2 TB de transferencia por unos 10 dólares al mes, mientras que el plan de 5 dólares al mes ofrece sólo 512 MB, 1 procesador, 20 GB de disco SSD y 1 TB de transferencia. Es importante señalar que DigitalOcean impone límites mensuales al uso del ancho de banda, lo que significa que es posible que tenga que actualizar su nivel de precios para hacer frente a los picos de tráfico esporádicos. Sin embargo, el precio de DigitalOcean puede valer la pena cuando consideras que AWS te da una instancia t2.small por $10 al mes (el mismo costo del plan más popular de DigitalOcean).
Preparación y aprovisionamiento
Los desarrolladores principiantes y los pequeños desarrolladores (que tal vez no tengan tiempo de sumergirse en tediosas tareas de desarrollo) no necesitan buscar más allá de Heroku. En cuanto a la configuración y el aprovisionamiento, es de lejos la más fácil y no requiere habilidades de desarrollo; es una plataforma de servicio completo en la nube que te evita los dolores de cabeza y las molestias de aprovisionar un servidor. Heroku te permite desplegar una aplicación Rails empujándola desde un repositorio Git y ofrece una interfaz amigable para el desarrollador. Aún mejor, está optimizada para las aplicaciones de Ruby on Rails desde el principio. Cuando se empuja una aplicación a uno de los servidores de Heroku, se encarga de cualquier problema de dependencia del sistema. Básicamente, hace para tu aplicación desplegada y alojada lo que Homebrew hace por ti cuando instalas RVM y el toolbelt de Heroku y PostgreSQL. La mayor dificultad con la que te encontrarás es con la instalación y configuración de Postgres y Heroku si estás en un Linux en lugar de un Mac. Pero después de ese obstáculo, el despliegue en Heroku es pan comido.
Con AWS, también puedes poner las cosas en marcha rápidamente (en tan sólo 20 minutos). Al igual que Heroku, AWS tiene una interfaz gráfica fácil de usar, pero se recomienda para el desarrollador intermedio y avanzado. Aunque parece que se adapta a las aplicaciones PHP, AWS ofrece un gran soporte para Ruby; gemas de Ruby disponibles para añadir soporte para SES o S3. AWS Elastic Beanstalk es un servicio fácil de usar para desplegar aplicaciones Ruby on Rails en servidores familiares como Apache y Nginx. Con el Servicio de Bases de Datos Relacionales de Amazon (Amazon RDS), puede fácilmente proveer una instancia de MySQL, PostgreSQL u Oracle en la nube. Elastic Beanstalk aprovisiona y opera la infraestructura y administra la pila de aplicaciones por usted, así que no tiene que gastar el tiempo o desarrollar la experiencia – en cambio, puede concentrarse en escribir código.
Los desarrolladores avanzados, por otro lado, pueden querer ver DigitalOcean, que afirma que puede estar en funcionamiento en menos de 55 segundos. DigitalOcean es genial para los desarrolladores de Linux, también, aunque algunos han encontrado tedioso y difícil el aprovisionamiento de un servidor con DigitalOcean. En algunos casos, los desarrolladores experimentados encontraron que gastaban demasiado en cuidar una aplicación Rails desplegada en su servidor privado virtual (VPS) en vivo. Informaron de que tuvieron que lidiar con los certificados SSL y los problemas de correo electrónico. Y aunque se puede aliviar algo del dolor de la configuración y el aprovisionamiento en DigitalOcean usando herramientas como Puppet y Chef, también lleva tiempo aprender a usar esas herramientas.
Escalabilidad
Heroku no es muy escalable en términos de costo de precios para el desarrollador, pero sí maneja la configuración de la arquitectura para el escalamiento. En pocas palabras, Heroku permite centrarse en el desarrollo del sitio web, no en el mantenimiento de su infraestructura. Utiliza un sistema de enrutamiento que decide qué instancia asignar a la solicitud, y se asegura de repartir inteligentemente la carga de trabajo entre todas las instancias en todo momento. Pero una vez que la aplicación crece, se le aplicará un aumento de precio de hasta el 600 por ciento. Así que, aunque Heroku ofrece una escalabilidad que no tienes que configurar tú mismo, podrías acabar pagando por ello; no es muy práctico para los desarrolladores con aplicaciones de alto tráfico.
Tanto DigitalOcean como AWS son muy escalables desde el punto de vista de los costes. Con DigitalOcean, la escalada es un poco complicada y requiere que se ejecuten algunos scripts de shell y averiguar cómo se debe escalar. Tienes que saber si necesitas escalar vertical u horizontalmente… y hacerlo tú mismo. AWS, por otro lado, se encarga de eso por ti con los servicios de Auto Escalado y Balanceo de Carga Elástica. El Auto Scaling le permite seguir de cerca la curva de demanda de sus aplicaciones, reduciendo la necesidad de aprovisionar manualmente la capacidad del EC2 de Amazon con antelación. AWS también ofrece un tesoro de recursos para desarrolladores, incluyendo artículos y tutoriales para hacer el mejor uso de sus servicios.
En pocas palabras, AWS ofrece más servicios que DigitalOcean. Con DigitalOcean, estás esencialmente por tu cuenta; es una estructura más sencilla para economizar tus necesidades de alojamiento, pero lo que te ahorras en cargos lo puedes perder en el tiempo dedicado a las tareas de desarrollo de buceo profundo (tiempo que podrías estar gastando escribiendo código).
Preparar un sistema para la escalabilidad implica mucha disociación, porque es esencial tener servidores más pequeños con menos responsabilidades en lugar de un servidor gigante con todo incluido. Esta es realmente la esencia de la escalabilidad horizontal, que suele ser el método más fiable y eficiente de escalabilidad (pero no es tan trivial como la escalabilidad vertical). Dividir la aplicación en partes también le ayudará a medir e identificar los posibles cuellos de botella. En general, el principal desafío de la escalada de las aplicaciones web es mantener actualizados y sincronizados todos los nodos de un clúster.
Una forma de abordar la escalabilidad con DigitalOcean (con menos dolor) es establecer una gota como una gota de administración que tiene su clave pública en todas las demás gotitas. Esto le permitiría empujar las actualizaciones de la página web con rsync, así como emitir comandos a otras gotitas, y consultarlas para los vitales de Nagios, NRPE y SNMPD. Tendrías que crear tu propio nivel de lógica para determinar cómo y cuándo deseas escalar las cosas. Por ejemplo, si un servidor alcanzara el 85 por ciento de uso de la CPU, duplicarías la RAM (escalado vertical) o crearías un clon (escalado horizontal).
En cuanto a la escala vertical, se logra aumentando los recursos del sistema, como añadir más memoria y potencia de procesamiento. Redimensionar una gota, por ejemplo, es escalar verticalmente. Aunque esto puede funcionar como una solución inmediata, podría estar ocultando los verdaderos problemas debajo de su aplicación, y no hay garantía de que un servidor dos veces más potente ejecute su aplicación dos veces más rápido. El escalamiento horizontal, como se mencionó brevemente, se logra agregando más servidores a un clúster existente (que es un grupo de servidores). Un equilibrador de carga distribuye la carga de trabajo entre los servidores de un clúster. En cualquier momento, se puede agregar un nuevo servidor Web al clúster existente para manejar más solicitudes de los usuarios que acceden a su aplicación; esto es un escalamiento horizontal. El equilibrador de la carga tiene una sola responsabilidad: decidir qué servidor del clúster recibirá una solicitud que haya sido interceptada. Básicamente actúa como un proxy inverso, haciendo que el proceso sea perfecto para el usuario.
Restricciones en los flujos de trabajo de las aplicaciones
Como con la mayoría de los proveedores de servicios, hay restricciones que hay que tener en cuenta a la hora de elegir el adecuado para su aplicación. Heroku, por ejemplo, requiere que uses sus paquetes de construcción. Por ejemplo, tampoco funciona bien (o realmente, en absoluto) con las bases de datos MySQL. Hay que usar PostgreSQL para la base de datos de la aplicación Rails cuando se despliega en Heroku. Con AWS, sin embargo, podemos usar PostgreSQL y MySQL. Y con DigitalOcean puedes usar PostgreSQL, MySQL, Oracle y NoSQL.
Soporte técnico y tiempo de inactividad
Con Heroku y AWS, los dinosaurios tienen un sistema de archivos efímero (DigitalOcean tiene un sistema de archivos persistente ). Un sistema de archivos efímero significa que nunca se sabe cuándo desaparecerán los archivos escritos en el disco. Si un banco de pruebas se detiene o se reinicia, los archivos desaparecen. Y eso significa que cualquier aplicación alojada en Heroku no debería depender de ningún tipo de almacenamiento local para funcionar porque, en un abrir y cerrar de ojos, ese almacenamiento podría desaparecer y no hay nada que puedas hacer al respecto. Heroku también tiene ubicaciones limitadas, lo que significa que no hay redundancia regional. Si estás ejecutando una aplicación en la ubicación de US East, y hay un apagón en US East donde un servidor se cae, no hay servidores de copia de seguridad que permitan que tu aplicación siga funcionando, por lo que tu aplicación experimentará ese apagón. ¿Puede permitirse ese tipo de interrupción si se produce un fallo? Si no, su mejor apuesta es ir con DigitalOcean, que le garantiza un 99 por ciento de tiempo de funcionamiento – y, si no cumple, le acreditará por cualquier tiempo de inactividad que el servicio no estaba disponible.
Para llevar
Como hemos visto, hay varias opciones para desplegar su aplicación y compartirla con el resto del mundo. Tómate un poco de tiempo para sopesar los pros y los contras de estos tres proveedores de servicios de hospedaje y decide cuál es la más adecuada para tus necesidades (y las de tus usuarios).