# Heroku

Heroku es una plataforma como servicio (PaaS) que admite varios lenguajes de programación. Una de las primeras plataformas en la nube, Heroku ha estado en desarrollo desde junio de 2007, cuando solo admitía el lenguaje de programación Ruby, pero ahora admite Java, Node.js, Scala, Clojure, Python, PHP y Go. Por esta razón, se dice que Heroku es una plataforma políglota, ya que tiene características para que un desarrollador cree, ejecute y escale aplicaciones de manera similar en la mayoría de los idiomas. Heroku fue adquirida por Salesforce en 2010 por 212 millones de dólares.

## Historia

Heroku fue desarrollado inicialmente por James Lindenbaum, Adam Wiggins, y Orion Henry para apoyar proyectos que eran compatibles con la plataforma de programación Ruby conocida como Rack. El desarrollo del prototipo tomó alrededor de seis meses. Más tarde, Heroku enfrentó contratiempos debido a la falta de clientes de mercado adecuados, ya que muchos desarrolladores de aplicaciones usaban sus propias herramientas y entornos. En enero de 2009, se lanzó una nueva plataforma que se construyó casi desde cero después de un esfuerzo de tres meses. En octubre de 2009, Byron Sebastian se incorporó a Heroku como director ejecutivo. El 8 de diciembre de 2010, Salesforce.com adquirió Heroku como subsidiaria de propiedad total de Salesforce.com. El 12 de julio de 2011, Yukihiro "Matz" Matsumoto, diseñador jefe del lenguaje de programación Ruby, se unió a la empresa como arquitecto jefe de Ruby. Ese mismo mes, Heroku agregó soporte para Node.js y Clojure. El 15 de septiembre de 2011, Heroku y Facebook presentaron Heroku para Facebook. En la actualidad, Heroku admite bases de datos Redis además de su estándar PostgreSQL.
En agosto de 2022, Heroku anunció que sus planes gratuitos serían descontinuados, citando el fraude y el abuso como razones para el cambio, lo que molestó a muchos clientes.

## Etimología

El nombre "Heroku" es un acrónimo de "heroico" y "haiku". El tema japonés es un guiño a Matz por crear Ruby. El nombre en sí se pronuncia de manera similar a la palabra japonesa que significa "ampliamente" (hiroku), aunque los creadores de Heroku no querían que el nombre de su proyecto tuviera un significado particular, en japonés o en cualquier otro idioma, por lo que optaron por inventar un nombre.

## Arquitectura

Las aplicaciones que se ejecutan en Heroku suelen tener un dominio único que se usa para enrutar las solicitudes HTTP al contenedor de la aplicación correcto o dyno. Cada uno de los dynos se distribuye en una "cuadrícula de dyno" que consta de varios servidores. El servidor Git de Heroku maneja las inserciones del repositorio de aplicaciones de los usuarios autorizados.
Todos los servicios de Heroku están alojados en la plataforma de computación en la nube EC2 de Amazon.

## Dynos

Los Dynos son piezas fundamentales del modelo de arquitectura de Heroku, son las unidades que proveen capacidad de cómputo dentro de la plataforma. Están basados en Contenedores Linux.
Cada Dyno está aislado del resto, por lo que los comandos que se ejecutan y los archivos que se almacenan en un Dyno, no afectan a los otros. Además cada Dyno provee el ambiente requerido por las aplicaciones para ser ejecutadas.
Los posibles comandos a ser ejecutados en los dynos incluyen procesos web, o cualquier otro tipo de proceso definido en el archivo Procfile de la aplicación. Este es un archivo de texto ubicado en el directorio raíz de la aplicación, y es el mecanismo provisto para la declaración de comandos que luego correrán los dynos. Básicamente, consiste de una lista de tipos de procesos de la aplicación. Cada tipo de procesos constituye una declaración de un comando.

### Principales características

* Elasticidad y crecimiento. La cantidad de Dynos asignados a una aplicación se puede cambiar en cualquier momento a través de la línea de comandos o el dashboard.
* Tamaño. Heroku ofrece diferentes tipos de dynos, cada uno con diferentes capacidades de procesamiento y memoria.
* Routing. Internamente los routers realizan un seguimiento de la ubicación de los Dynos que estén corriendo, y redirigen el tráfico de acuerdo a la misma.
* Seguimiento. Existe un manejador de Dynos, el cual monitorea de forma continua los dynos que se estén ejecutando. En caso de una falla en un Dyno, este es eliminado y creado nuevamente.
* Distribución y redundancia. Los Dynos se encuentran aislados uno de otro. Esto implica que de existir fallos en la infraestructura interna de alguno de ellos, los otros dynos no se ven afectados, y consecuentemente tampoco la aplicación.

## Productos
### Heroku Platform

    La red Heroku ejecuta las aplicaciones del cliente en contenedores virtuales que se ejecutan en un entorno de tiempo real, heroku llama a esto contenedores, Dynos. Estos Dynos pueden ejecutar código escrito en Node, Ruby, PHP, Go, Scala, Python, Java o Clojure. Heroku también proporciona buildpacks personalizados con los que el desarrollador puede implementar aplicaciones en cualquier otro lenguaje. Heroku le permite al desarrollador escalar la aplicación instantáneamente tan solo incrementando el número de dyno o ejecutando la aplicación en un dyno más potente.

### Heroku Postgres

    Heroku Postgres es un servicio de base de datos en la nube (DBaaS) de Heroku basado en PostgreSQL. Heroku Postgres provee características como protección continua, rollback y alta disponibilidad. También permite forkear la base de datos, crear followers y dataclips.

### Heroku Redis

    Heroku Redis es el Redis personalizado de Heroku que provee una mejor experiencia de desarrollo. Heroku lo ofrece como servicio, ayuda a gestionar las instancias con una CLI, permite asociar datos con Postgres para ganar información comercial usando herramientas SQL permitiéndole al cliente obtener visibilidad del rendimiento.

### Heroku Teams

    Heroku Teams es una herramienta de gestión de equipo que provee colaboración y controles para reunir a desarrolladores, procesos y herramientas con el fin de crear un mejor software. Con Heroku Teams los equipos pueden autoorganizarse, agregar y gestionar miembros del equipo, obtener un control detallado con permisos a nivel de aplicación, y también usar herramientas colaborativas como Heroku Pipelines.

### Heroku Connect

    Heroku Connect les permite a los usuarios de aplicaciones Heroku poder integrarse fácilmente con las implementaciones de Salesforce. Esto es posible al tener una perfecta sincronización de datos entre la base de datos Postgres de Heroku y la organización de Salesforce.

### Heroku Enterprise

    Heroku Enterprise proporciona servicios a grandes empresas que les ayudan a mejorar la colaboración entre diferentes equipos. Proporciona un conjunto de características como detallados controles de acceso, identidades para la organización y espacios privados, para administrar el proceso de desarrollo de aplicaciones empresariales, los recursos y los usuarios.

### Heroku Elements

    Heroku Elements proporciona a los usuarios los complementos, herramientas y servicios para desarrollar, extender y operar la aplicación. Existen los llamados Buildpacks que automatizan los procesos de compilación para muchos de los frameworks y lenguajes de programación. Con un Buildpacks se logra aprovisionar con un solo clic toda la configuración, componentes de terceros, librerías y patrones para una aplicación.

## Competidores

* AWS Elastic Beanstalk
* Bluemix
* Engine Yard
* Google App Engine
* OpenShift
* Microsoft Azure
* Cloud_Foundry
* SAP Cloud Platform