En los años recientes, ha habido una explosión en el ramo de "servicios hospedados en la nube". Estos son aquellos ofrecidos en demanda directamente desde el proveedor en lugar de ser hospedados en la infraestructura del cliente. Los servicios relacionados con la nube están entre los más estratégicos para los departamentos de tecnología durante el 2015 y más de la mitad de empresas en los Estados Unidos ya ofrecen servicios directamente desde la nube.
Un sector importante de este mercado es el relacionado con el hospedaje de servicios o aplicaciones web. A grandes rasgos, existen dos principales categorías: infraestructura como servicio (IaaS) y plataforma como servicio (PaaS). La primera se enfoca en proveer principalmente herramientas como servidores, firewalls, volúmenes de almacenamiento y DNS (entre otros). La segunda abstrae toda la infraestructura y la expone al desarrollador como contenedores capaces de ejecutar aplicaciones en distintos lenguajes y almacenar datos en diversas tecnologías de bases de datos.
Este tipo de servicios ha representado una revolución para las empresas pequeñas o los desarrolladores independientes que quieren mantener sus costes bajos y además poder escalar a más o menos capacidad en base al tráfico de usuarios. En lugar de tener que adquirir o rentar equipos de hardware en un centro de datos, con unos cuantos clics se puede iniciar remotamente una infraestructura virtual en cualquier parte del mundo lista para servir cualquier tipo de aplicación.
Lógicamente existe una gran diversidad de proveedores de plataforma o infraestructura como servicio y no es una tarea fácil seleccionar uno en particular. A continuación veremos un resumen de algunos de los principales proveedores:
Amazon Web Services (AWS)
Es el mayor proveedor (y uno de los pioneros) de infraestructura en la nube (IaaS). AWS permite crear servidores virtuales de distintas capacidades y con sistemas operativos preinstalados. Los servidores pueden ser iniciados o detenidos en cualquier momento y el coste es calculado por hora.
El principal ofrecimiento de AWS es el de proveer infraestructura, es decir, los servidores no tienen ningún software preinstalado (solo el sistema operativo). Si el objetivo es publicar una aplicación en PHP, Ruby o Python, el cliente es el responsable de instalar y configurar todas las dependencias manualmente. También se deben configurar los balanceadores de carga y firewalls, y distribuir el servicio en las distintas zonas de AWS para garantizar la alta disponibilidad.
AWS también ofrece un amplio abanico de productos en la nube, como manejador de DNS (Route53), Bases de datos (DynamoDB, SimpleDB, RDS), almacenamientos de ficheros (S3, EBS), respaldos (AMI), colas/mensajes (SQS), notificaciones (SNS) y muchos otros. Estos servicios se complementan e integran muy bien entre ellos. Algunas alternativas similares a AWS son Google Compute Engine y Rackspace Managed Cloud.
Heroku
A diferencia de AWS, cuyo principal foco es en infraestructura, Heroku está enfocado en la plataforma (PaaS). En lugar de servidores, Heroku ofrece contenedores de Aplicaciones llamados Dynos. Los Dynos están preconfigurados para los distintos lenguajes o tecnologías.
La mayor ventaja de este paradigma es la rapidez con la que se puede publicar una aplicación a la nube. Con un comando “git push heroku master”, la aplicación está lista para recibir peticiones. No hay que invertir tiempo en configurar servidores, firewalls, ni bases de datos. Todo esto viene con un coste adicional asociado, pero generalmente para aplicaciones o equipos pequeños realmente vale la pena ya que ahorra muchos problemas y dolores de cabeza que pueden presentarse si además hay que mantener la infraestructura.
La mayor desventaja con servicios como Heroku es la falta de personalización y optimizaciones que pueden realizarse cuando hay acceso más abierto a la infraestructura. Para una aplicación pequeña esto no es un problema representativo. Pero para una aplicación con decenas de millones de visitas al día, las optimizaciones a nivel de infraestructura pueden representar la diferencia entre funcionar o colapsar, además de representar grandes ahorros de coste. Entre algunas de las alternativas a Heroku encontramos a Google App Engine, Openshift, AppFog y DotCloud.
Parse
Parse está a un nivel de abstracción por encima a Heroku y nace de la necesidad de los desarrolladores de aplicaciones de tener un componente de backend. Inicialmente fue concebido para soportar aplicaciones móviles, pero con el tiempo han ido generalizando sus servicios para cualquier tipo de aplicación cliente. La compañía fue adquirida por Facebook en 2013.
Parse provee una serie de SDKs para que los desarrolladores puedan almacenar y acceder información relacionada a sus aplicaciones y usuarios en la nube. La plataforma asegura que la información es respaldada y que el servicio siempre estará disponible. Además de servicios de almacenamiento, Parse ofrece una gran diversidad de servicios en la nube que permiten a los desarrolladores implementar notificaciones, tareas programadas y análisis de datos.
Parse permite al desarrollador crear y publicar aplicaciones en periodos de tiempo realmente cortos. No hay que pensar en infraestructura, bases de datos, escalabilidad, disponibilidad ni analíticos. La plataforma se encarga de todo y el desarrollador puede enfocarse en el producto, el crecimiento y las ventas.
La mayor ventaja que ofrece Parse es al mismo tiempo su mayor debilidad. Debido a que abstrae toda su tecnología en una serie de servicios, una vez que la aplicación ha sido desarrollada y publicada, es muy difícil moverla a otro lugar (generalmente requiriendo muchos cambios o reescrituras). También existen alternativas para Parse, entre ellas backendless y Appcelerator.
¿Qué debe usar un desarrollador en cada caso?
Si el servicio que se desea construir es muy extenso a nivel de cómputo o de manejo de datos, es mejor invertir y construir sobre un servicio de infraestructura. Aunque al principio pueda causar un esfuerzo extra, realmente ahorrará muchos problemas y costes a largo plazo. Por el contrario, si el producto es una aplicación móvil (o de escritorio) que debe tener una simple funcionalidad a nivel de backend y compartir datos entre distintas plataformas, Parse es una gran opción.
Un punto intermedio es usar algún PaaS, pero desarrollando una capa de abstracción a todo lo que es específicos a esa plataforma. De esta forma, una vez que el producto esté creciendo se puede realizar la migración a un servicio de infraestructura y, a nivel de código fuente, solo será necesario adaptar la capa de abstracción a la nueva arquitectura.
Es muy difícil estimar desde el principio cuál será el alcance o las funcionalidades de una aplicación a largo plazo, por lo tanto es importante entender cómo estos servicios se compensan entre ellos. La regla general es, mientras más abstracto sea el servicio, más difícil será de personalizar o reemplazar en el futuro. Pero al mismo tiempo, los ciclos de desarrollo e iteración serán más cortos inicialmente, lo cual beneficia la rápida validación del producto.