Este documento presenta una introducción a Heroku, una plataforma para el desarrollo y despliegue de aplicaciones. Explica que Heroku permite desplegar aplicaciones de manera escalable utilizando dynos y se integra con Git para control de versiones. También cubre temas como la migración de aplicaciones, el uso de Postgres como base de datos y la integración con Salesforce a través de Heroku Connect.
2. Acerca de Liquid Kloud
Fundada en 2016
Objetivo 1: formar un equipo de profesionales expertos
en tecnologías cloud
Objetivo 2: colaborar con la comunidad Salesforce
(boutiques, empresas servicios, clientes, etc)
El equipo actual tiene además un fuerte background en
ECM, gestión de contenidos, marketing digital, social
media, etc.
3. ¿Qué es Heroku?
Es una plataforma tanto de desarrollo como de
delivery de aplicaciones.
Al igual que force.com es una arquitectura multi-
tenant
Se apoya en Amazon . No comparte infraestructura con
force.com
Integrada en GIT. Permite desplegar versiones, hacer
rollback, gestionar dependencias, etc.
Proporciona bases de datos Postgres.
Se puede utilizar para aplicaciones y sites que puedan
tener altos picos de actividad (campañas, registro online
eventos, etc).
4. Historia de Heroku
2007 - James Lindenbaum, Adam Wiggins, Orion Henry fundan Heroku. Solo soportaba
Ruby inicialmente.
2008 – Consiguen levantar $3 Millones (vía business angels)
2010 – Salesforce compra Heroku por $200 Millones
2011 – Se anuncia un fuerte acuerdo con Facebook para que Heroku sea una plataforma de
hosting para aplicaciones en Facebook
2011 – Se incluye soporte para aplicaciones Java
2014 – Se crean data centers en Europa
2014 – Lanzamiento de Heroku Connect (sincronización con Salesforce)
2015 – Se lanza App Cloud, que incluye Force, Heroku y Lightning
2016 – Actualmente lo usan clientes como Citrix, Toyota, KLM, Macy’s, etc.
5. ¿Qué es un Dyno?
En Heroku, el código corre siempre dentro de en un dyno.
Un dyno es un proceso. Puede usarse para servir contenido web,
para ejecutar procesos batch, etc. Suele disponer de unos 512 MB de
memoria.
Garantiza escalabilidad. Si una aplicación se convierte en viral y
comienza a tener muchas visitas, automáticamente se levantan varios
dynos.
Aísla de aspectos como comunicaciones SSL o enrutamiento y
balanceo.
Cada proceso dyno es independiente y puede ser levantado en otras
máquinas de manera transparente.
Cada dyno tiene su propio filesystem efímero y este es destruido
cuando el proceso es detenido. Si una aplicación necesita grabar
ficheros, debe usar otros servicios (ej: Amazon).
6. Heroku es “políglota”
Es posible construir aplicaciones en Heroku
usando muchos lenguajes de programación
diferentes.
Por cada aplicación se proporciona un fichero
llamado Procfile que es el que indica como se
levanta una determinada aplicación.
Mediante los ‘buildpacks’ es posible dar
soporte a cualquier lenguaje. En estos casos,
hay que construir tres scripts: 1) bin/detect ; 2)
bin/compile ; 3) bin/release.
7. Control de versiones
Heroku proporciona un repositorio
git.
Internamente se apoya en GitHub,
pero no es necesario hacer pagos
adicionales
Normalmente a la hora de
desarrollar con Heroku,
habitualmente se lanzarán estas tres
operaciones: 1) git add, 2) git
commit, 3) git push
•Tras el git push, se ejecuta el Heroku
slug compiler
8. Los 12 principios
Adam Wiggins fue uno de los fundadores de Heroku.
Definió una metodología con 12 factores o principios.
Las aplicaciones Heroku se ajustan a estos principios
9. Migración a Heroku
A la hora de migrar una aplicación a Heroku, hay que adaptar cualquier tipo de
grabación de fichero a filesystem que estuviéramos haciendo, y pasarlo a otros servicios
(Amazon).
Si utilizábamos bases de datos en memoria, en el caso de Heroku al ser los dynos
efímeros, es recomendable rediseñar la solución.
No se garantiza que entre requests se vaya a mantener estado en memoria. No se
soportan sesiones. Alternativas: cookies, Redis, memcached.
La aplicaciones Java en Heroku no necesitan un contenedor de servlets. Suelen
arrancarse aplicaciones standalone.
Las aplicaciones deben tener un buen rendimiento. Si un request tarda más de 30
segundos, se detiene ese proceso.
10. Tratamiento de logs
Heroku incluye Logplex
Asume que un log es un stream de eventos.
Los logs se pueden tratar con add-ons que permiten
hacer operaciones de monitorización, análisis, etc.
11. Heroku Toolbelt
En cada puesto de desarrollo hay que instalar el Heroku
Toolbelt.
Incluye una versión de git así como una versión de forego
(anteriormente se usaba foreman). Forego se utiliza para poder
ejecutar las aplicaciones en local
También incluye el Heroku Client.
Existe una integración con Eclipse.
13. Conseguir un entorno de desarrollo
Los entornos de desarrollo son gratuitos.
Tienen una serie de limitaciones.
Estos entornos ‘duermen’ al cabo de 30 minutos de inactividad, de tal manera que la
siguiente petición tardará en ser atendida.
Por cada 24 horas, el sistema debe haber dormido unas 6 horas en total.
Para conseguir un entorno que nunca ‘duerma’ hay que pasar al siguiente plan, al
‘Hobby’.
18. Configuración de Postgres
Se recomienda instalar en local
PostgreSQL
Eso dará acceso a la herramienta de
línea de comando psql, la cual está
integrada con Heroku client.
Desde aquí se pueden listar esquemas,
tablas de base de datos, etc.
19. Configuración de Postgres
Configuración de base de
datos en Spring
Importante para
desarrollo el número
máximo de conexiones .
En local hay que usar
parámetros como ssl=true
y sslfactory
NonValidatingFactory
20. Desarrollo con Java
Las PaaS como Heroku liberan a los desarrolladores de tener que apoyarse en un
contenedor de aplicaciones.
No es preciso desplegar archivos WAR
Se generan archivos JAR que llevan embebido un tomcat o un jetty
Uso de Maven para gestionar dependencias.
Las aplicaciones Heroku deben ser stateless (si es preciso almacenar estado, debe
usarse Redis / memcached).
21. Pasos para desplegar una aplicación Java
Desarrollar la aplicación apoyándose en Maven.
Lanzar un “git init” para inicializar el repositorio.
Lanzar un “heroku create <nombre_aplicación>”
Hacer un “git add” y un “git commit”
Desplegar en Heroku con “git push heroku master”
Abrir la aplicación, vía URL o lanzando “heroku open”
22. Integración con force.com
Mediante Heroku Connect es posible elegir
objetos (tablas) en force.com y a partir de ahí
seleccionar qué campos queremos que se
repliquen en Heroku.
23. Integración con force.com
Se puede configurar la frecuencia con la que los cambios en Salesforce se
trasladarán a Heroku.
Es posible definir una sincronización bidireccional, de tal manera que los cambios
en Heroku se envíen a force.com
24. Arquitectura aplicación demo
Colgada aquí: https://github.com/jrhuerga
Gestionar un objeto (TipoEnvio) creado en Salesforce y asociado al objeto Account
Se apoya en Spring Boot para el backend (fundamentalmente un CRUD basado en
REST)
Uso de WebJars para gestionar dependencias de front-end
La parte cliente se ha construido usando AngularJS
La presentación está hecha con Bootstrap.
26. Prueba Heroku hoy mismo
Créate una cuenta gratuita en heroku.com
Bájate los fuentes de https://github.com/jrhuerga
Para cualquier duda: @jrhuerga
Gracias !!