Una vez que te apuntes al InnovaChallenge MX 2014, organizado por BBVA Bancomer, tendrás que empezar a pensar en el tipo de aplicación que quieres realizar. Si es una aplicación web, o requiere del apoyo de una infraestructura web para funcionar, una de las primeras preguntas que te harás será: ¿dónde hospedo mi aplicación? Afortunadamente, estamos en 2014, y a día de hoy, existen una inmensa variedad de opciones. Repasaremos a continuación las más populares
Alojamiento tradicional
Hasta la popularización de tecnologías basadas en la virtualización y entornos cloud, las aplicaciones web se alojaban en servidores compartidos o dedicados.
En el primer caso, la aplicación se ejecuta en un único servidor, donde comparte espacio y ancho de banda con otras aplicaciones, que también corren sobre la misma máquina. Es una solución normalmente barata, y una buena elección para aplicaciones web que no reciben demasiadas visitas y no consumen mucho ancho de banda. Y es precisamente este último requisito el que supone una mayor limitación: si nuestra aplicación empieza a recibir demasiados usuarios y/o a consumir mucho ancho de banda, nuestro proveedor de servicio limitará el acceso a la aplicación, o incluso nos impondrá multas. El resultado será que los usuarios dejarán de recibir servicio.
En el segundo caso, la máquina donde se ejecuta la aplicación no es compartida, sino que la tenemos en exclusiva para nuestra aplicación. Tanto el espacio de almacenamiento como el ancho de banda son en exclusiva para nosotros. A costa, eso sí, de un coste considerablemente mayor. Y sin olvidar que es igualmente posible que lleguemos a superar los límites de ancho de banda o almacenamiento, teniendo que pagar más para poder seguir dando servicio.
Entre los proveedores más conocidos de alojamiento compartido o dedicado, se encuentran HostGator, Dreamhost y Linode
Pero en una época como la actual, con aplicaciones que manejan grandes volúmenes de datos y dan servicio a millones de usuarios simultáneos, la rigidez de los proveedores tradicionales puede resultar un problema grave. Hemos llegado al quid de la cuestión: la escalabilidad. Si nuestra aplicación crece de manera repentina, hemos de ser capaces de responder de manera inmediata, para que el servicio que ofrezcamos no se vea deteriorado. Es por eso que cobra sentido el uso de plataformas cloud a la hora de desplegar nuestras aplicaciones.
A día de hoy, además, existen infinidad de herramientas y servicios orientados a todo el ciclo de desarrollo y despliegue por el que pasan la inmensa mayoría de aplicaciones actuales. No queremos solo desarrollar una aplicación web. Queremos que sea escalable. Que de servicio a millones de potenciales usuarios sin degradarse. Que las herramientas que usamos para desarrollarla estén perfectamente conectadas con el entorno donde la desplegaremos. Y que el precio a pagar se adapte a las necesidades que nuestra aplicación demande en cada momento.
Por estas razones, veremos a continuación algunas de las opciones más populares a la hora de desplegar aplicaciones web actuales: las plataformas PaaS
Alojamiento PaaS
Como ya hemos mencionado, la popularización del cloud computing y sistemas de virtualización, han facilitado la proliferación de una gran cantidad de plataformas orientadas al despliegue de aplicaciones con la escalabilidad como emblema principal.
De manera resumida, los servicios que proporciona una plataforma cloud pueden diferenciarse en tres capas, como muestra la imagen siguiente
Fuente de la imagen
El nivel que nos interesa como desarrolladores de aplicaciones con un componente web es el intermedio, el de Platform as a Service. De esa forma, nos podemos despreocupar de la gestión de máquinas virtuales, sistemas de almacenamiento o balanceo de carga que tienen lugar en la capa inferior. Y en cualquier caso, si en algún momento queremos hacernos cargo manualmente de la gestión de estos componentes, siempre podremos recurrir a plataformas que nos lo permiten, como pueden ser Amazon Web Services, Windows Azure, Digital Ocean o RackSpace
Como ya hemos dicho, vamos a centrarnos en proveedores que nos faciliten el nivel de Platform as a Service. Es decir, una plataforma completa de despliegue de aplicaciones, que ya incluya un sistema operativo, un entorno de ejecución para el lenguaje de programación que elijamos, un acceso a base de datos y un servidor web, sin necesidad de configurar todos estos componentes de manera manual. Veremos los más utilizados.
Heroku
El primero de ellos, y posiblemente el más famoso, es Heroku.
La infraestructura de Heroku está basada en Ubuntu como sistema operativo y PostgreSQL como gestor de bases de datos. Contiene entornos de ejecución para Ruby, Java, Node.js, Scala, Clojure, Python, PHP y Perl. Éste último, no documentado.
La empresa fue adquirida por Salesforce en 2010, y tiene planes gratuitos. Dispone de conexión directa con GIT, y multitud de add-ons, lo que la hacen en una de las elecciones más populares por parte de los desarrolladores web.
CloudFoundry
CloudFoundry es una plataforma utilizada por diversos proveedores de infraestructura cloud.
La plataforma está basada en software de código abierto y ha sido desarrollada por VMWare. Como ya se ha dicho, es utilizada por varios proveedores de cloud para ofrecer PaaS. El principal proveedor es Pivotal Software, que ofrece sus servicios a través de run.pivotal.io, con soporte para lenguajes Ruby, Java, Node.js, Grails, Go, Python, PHP, Erlang, Haskel y Clojure. También permite conectividad con bases de datos como MySQL, PostgreSQL, MongoDB y Redis.
En cuanto a los planes, los hay desde 2.70$ al mes, con 60 días gratuitos de prueba.
Otro proveedor de PaaS basado en la tecnología de CloudFoundry es IBM, a través de su plataforma Bluemix. Una plataforma que proporciona, literalmente, decenas de servicios que permiten a los desarrolladores desplegar aplicaciones creadas en cualquiera de los lenguajes más conocidos: Java, Grails, Node.js, Ruby, Python o PHP. También conexiones con las bases de datos más populares: MySQL, PostgreSQL, MongoDB, Redis, etc. E incluso ofrece soporte para los desarrolladores de plataformas móviles, como Android o iOS.
IBM está sacando un gran partido de la arquitectura modular de CloudFoundry, basada en Open Source. De forma que, si un lenguaje o plataforma no está soportado, puede ser posteriormente añadido por la comunidad, por IBM o por cualquiera de sus partners. Se puede consultar el catálogo oficial de servicios ofrecidos por Bluemix en este enlace.
En cuanto a la variedad de precios, es realmente inmensa. Existe una tabla orientativa que permite realizar cálculos de costes mensuales en función de lo que se vaya a utilizar. Se ofrecen 30 días gratis.
Amazon Elastic Beanstalk
Ya hemos mencionado Amazon Web Services como plataforma IaaS (Infrastructure as a Service, el nivel inferior de la pirámide). Pero Amazon también proporciona un servicio de PaaS basado en su infraestructura: Amazon Elastic Beanstalk.
Los lenguajes soportados son los habituales Java, Ruby, PHP, Python y Node.js. Adicionalmente, también soporta el despliegue de aplicaciones escritas en .NET, y el uso de contenedores Docker.
En cuanto a la política de precios, se cobra por uso, como en el resto de servicios proporcionados por Amazon. No obstante, si nunca hemos registrado una cuenta de Amazon Web Services, tenemos un año de uso gratuito de ciertos recursos limitados, más que suficientes para la mayoría de nuevas aplicaciones que queramos desarrollar.
Google App Engine
El gigante Google, como no podía ser de otra forma, no se queda fuera del negocio de los PaaS. Para ello, proporciona su plataforma Google App Engine, o GAE, de manera abreviada.
La plataforma de Google es algo más limitada que sus competidores directos. Si bien permite el uso de los típicos lenguajes: Java, Ruby, Clojure, Scala, Python, Groovy y PHP, además de Go, desarrollado por la propia Google, existen una serie de restricciones que deberemos tener en cuenta. Por ejemplo, si necesitamos una base de datos relacional, debemos hacer uso del datastore, una implementación propia de base de datos relacional, con la que nos comunicaremos a través del lenguaje Google Cloud SQL (GQL, de manera abreviada).
A cambio, podremos disfrutar de una cuota gratuita. Lo que significa que no pagaremos nada, sin ninguna restricción de tiempo, siempre y cuando no superemos unos límites en cuanto a nivel de consumo de recursos.
Microsoft Azure Websites
Al igual que Google no se queda fuera de la batalla de los PaaS, Microsoft tampoco está dispuesta a ceder terreno. Es por eso que proporciona Microsoft Azure Websites como plataforma para los desarrolladores web
Los lenguajes oficialmente soportados por la plataforma son Java, Node.js, Python, PHP y, por supuesto, .NET. También permite el uso de MySQL y MongoDB, entre otras soluciones de almacenamiento de datos.
Sobre los precios, Microsoft también sigue el modelo de capas, permitiendo un uso gratuito de los recursos hasta un límite máximo. Adicionalmente, dispone de ofertas especiales para Startups, a través del programa BizSpark, y para instituciones educativas.
Nodejitsu
Para los fanáticos de Node.js y toda la tecnología que le acompaña, existe la plataforma Nodejitsu
Se permiten exclusivamente aplicaciones escritas en Node.js, pero a cambio, facilitan la vida del desarrollador en dicho lenguaje, proporcionándole un entorno con todo lo que puede necesitar.
Su plan de precios comienza en 25$ / mes, pero ofrecen un plan especial de alojamiento de una aplicación Node.js de manera gratuita, siempre que tenga licencia de código abierto.
Openshift
Finalizamos nuestro repaso con OpenShift, la completa solución PaaS de RedHat, empresa muy conocida en entornos GNU/Linux
Los lenguajes soportados son Javascript, Ruby, Python, PHP, Perl, Java Haskell y .NET. En cuanto a bases de datos, podemos usar MySQL, PostgreSQL, MongoDB y Microsoft SQL Server.
Su plan de precios es realmente competitivo, permitiendo una gran variedad de configuraciones de manera gratuita, y comenzando en tan solo 20$ / mes.
Para más información otras soluciones PaaS, puede consultarse esta entrada de la Wikipedia
Conclusiones
En la actualidad, existen una gran cantidad de soluciones para desplegar nuestras aplicaciones web. Desde los tradicionales hostings compartidos / dedicados, con mayor rigidez y precios fijos, hasta las modernas infraestructuras cloud, que facilitan el trabajo del desarrollador, proporcionado el nivel de Plataforma como Servicio (PaaS).
Los gigantes del mundo de la informática e Internet han apostado por este último enfoque, y proporcionan soluciones para todos los gustos. Desde plataformas sencillas y con una curva de aprendizaje relativamente corta, como Nodejitsu u OpenShift, hasta enormes infraestructuras que permiten prácticamente cualquier cosa, como las que ofrecen Microsoft (Azure), IBM (Bluemix) o Amazon (Web Services), pasando por arquitecturas intermedias en cuanto a tamaño, como Heroku.
Sea cual sea la aplicación que queramos desarrollar, lo que está claro es que no nos van a faltar opciones donde elegir. ¡El único límite es nuestra imaginación! (y nuestro bolsillo)