Qué es Heroku y principales características

En este artículo se analiza Heroku, una plataforma como servicio (Paas) de computación en la nube. Se repasaran sus capacidades de runtime, los lenguajes soportados por la plataforma, las posibilidades de escalado de las aplicaciones a partir de elementos ofrecidos por la plataforma y finalmente una breve conclusión indicando las ventajas y desventajas del uso de Heroku.

 

Heroku Platform

 

Heroku fue fundada en 2007 por Orion Henry, James Lindenbaum y Adam Wiggins. Heroku es una plataforma como servicio (PaaS) de computación en la nube la cual inicialmente fue desarrollada para soportar aplicaciones en lenguaje Ruby pero posteriormente ha extendido su soporte a numerosos lenguajes y aplicaciones que ofrecen una mayor flexibilidad y agilidad a la hora de construir aplicaciones en este entorno de desarrollo. En diciembre del 2010, Heroku fue adquirido por Salesforce en un movimiento que alcanzó los 212 millones de dólares. Heroku es una PaaS completamente gestionada por lo que toda la complejidad subyacente como la respuesta a fallos, monitorización de vulnerabilidades de seguridad, planificación de ampliaciones y ampliaciones reales están gestionados por la propia plataforma.

estructura-heroku

 

Heroku Runtime

 

Heroku Runtime es la parte de la plataforma Heroku Platform responsable de aprovisionar y orquestar los contenedores donde se ejecutan las aplicaciones, más conocidos como dynos, así como gestionar y supervisar su ciclo de vida, proporcionar la configuración adecuada de la red, enrutamiento HTTP y más funcionalidades. ¿Pero que es un Dyno? Los Dynos son contenedores Linux aislados y virtualizados que están diseñados para ejecutar código basado en user-specified command. Son los encargados de soportar la ejecución de las distintas aplicaciones que están desplegadas sobre Heroku Platform y tienen un escalamiento basado en los recursos demandados por cada aplicación.

Los dynos pueden ser de tres tipos: web, worker o cron.

  • Web: Se encarga de ejecutar aplicaciones web
  • Worker: Puede encargarse de ejecutar cualquier tipo de proceso que no sea web.
  • One-off: Suelen ser procesos de poca duración o temporales, que pueden funcionar de forma independiente a otros dynos que se encarguen de la ejecución global de la aplicación.

Los posibles comandos a ser ejecutados en los dynos incluyen cualquier tipo de proceso definido en el archivo Procfile de la aplicación. Este es un archivo de texto ubicado en el directorio raíz y es el mecanismo provisto para la declaración de los distintos comandos que posteriormente ejecutará el dyno.

Podemos destacar las siguientes características de los dynos:

  • Escalabilidad. La cantidad de Dynos asignados a una aplicación puede ser modificado en cualquier momento a través de la interfaz de comandos en línea de Heroku (Heroku CLI) o a través del dashboard de la aplicación.
  • Tamaño de los dynos. Heroku ofrece distintos tipos de dynos con diferentes capacidades de procesamiento y memoria.
  • Distribución y aislamiento. Al encontrarse aislados, si se produjera un error en la infraestructura de uno de ellos no afectaría ni a otros dynos ni a la aplicación.

Heroku ofrece una gran variedad de lenguajes sobre los que construir las aplicaciones que se ejecutarán en la plataforma. Actualmente soporta los siguientes lenguajes, con documentación personalizada para cada uno de ellos en la página oficial de Heroku:

  1. NodeJS
  2. Ruby
  3. Java
  4. PHP
  5. Python
  6. Go
  7. Scala
  8. Cloiure

 

Heroku elements

 

Heroku elements puede definirse como servicios en la nube de terceros que permite a los desarrolladores poder ampliar inmediatamente los capacidades y funcionalidades que su aplicación necesita de acuerdo a requisitos tanto funcionales como técnicos.

Podemos diferenciar tres grupos dentro de Heroku Elements:

  • Add-ons

    Son componentes que dan soporte a una aplicación en funcionalidades como almacenamiento de datos, monitorización, análisis, procesamiento de datos, registro de logs, control de errores y excepciones, testing y muchas más.

    Estos componentes están diseñados con el objetivo de que los desarrolladores puedan centrarse en la construcción de las aplicaciones sin contar con la complejidad adicional de mantener estos servicios. El mantenimiento de estos servicios es realizad por proveedores externos o por el propio Heroku.

    Algunos de los add-ons que Heroku ofrece y que se podrían incorporar a nuestras aplicaciones son:

    • Almacenamiento de datos à Apache Kafka, PostgreSQL, MongoDB, SFTP To Go, Redis Cloud, etc.
    • Conectores con Salesforce à Heroku Connect y Marketing Connector.
    • Logging à Papertrail

     

    La forma de incorporar los add-ons a las aplicaciones es muy sencilla, se puede hacer a través del Dashboard de Heroku o de la interfaz de comandos en línea de Heroku (Heroku CLI).

    Para cada uno de los add-ons se tienen distintos planes que se diferencian tanto en coste como en capacidades ofrecidas. Una vez que se selecciona un add-on en una aplicación se puede modificar su plan con un par de clicks ya sea para aumentarlo o para disminuirlo, así como para eliminarlo.

    addons-heroku

  • Buildpacks

    Son los encargados de transformar el código desplegado sobre una aplicación en un Slug, para que posteriormente puedan ser ejecutados sobre un dyno.

    ¿Qué es un Slug? Son copias comprimidas y optimizadas de una aplicación y que pueden ser utilizadas para desplegarse sobre otras aplicaciones o para recuperar versiones pasadas de una aplicación.

    Se componen de un conjunto de scripts y dependiendo del lenguaje de programación sobre el que esté construido, los scripts podrán recuperar las dependencias, el código compilado que lo componía, etc.

    El soporte que actualmente Heroku da para la construcción de estos Buildpacks es extensible a todos los lenguajes de programación que soporta la plataforma.

  • Buttons

    Heroku Buttons proporcionan una forma fácil de poner en marcha una aplicación rápidamente sobre la plataforma Heroku. Son punteros a repositorios de código fuente de distintas aplicaciones públicas y que se han ampliado con un pequeño archivo que determina como debe desplegarse y configurase la aplicación.

    Actualmente hay aproximadamente unos 1.400 Heroku Buttons disponibles.

 

Conclusión

 

Ventajas

Como principal ventaja para decidirse a utilizar Heroku, podemos encontrar la rapidez con la que se puede publicar una aplicación y en consecuencia que al momento de publicarla está se encuentre activa y preparada para recibir peticiones sin tener que realizar configuraciones adicionales. También cabe destacar la amplia variedad de lenguajes que soporta por lo que la elección de sobre que tecnología se quiere realizar una aplicación web, un proceso de gestión de colas, etc. Dependerá principalmente del desarrollador. Adicionalmente las facilidades de escalado de la aplicación conforme está lo demande y la estabilidad que ofrece la plataforma al estar apoyada sobre AWS (Amazon Web Service) garantiza un rendimiento y disponibilidad excelentes.

 

Desventajas

La principal desventaja con la que cuenta Heroku se centra en la construcción de grandes aplicaciones sobre las cuales el número de peticiones y procesos que se ejecutan de forma diaria hace que se necesite de una infraestructura totalmente optimizada y personalizada, las cuales suponen un gran desafío si el desarrollo de esas grandes aplicaciones se realiza con Heroku. Adicionalmente añadir que dependiendo de la funcionalidad que se quiera dar a la aplicación los add-ons ofrecidos por la plataforma pueden ser algo escasos y a su vez bastante costosos si necesitamos de planes superiores para garantizar que cumplimos con los requerimientos esperados.