Cloud Foundry, Spring Boot y Oracle Cloud, una alternativa para Microservicios
Los Microservicios están en un momento de popularidad muy alta entre los desarrolladores, arquitectos y en general en las áreas de TI. Últimamente he escuchado cada vez a más colegas mencionar que están implementando soluciones con este estilo de arquitectura en sus empresas.
Y no es de sorprenderse que esta tendencia vaya en aumento, en todos los eventos técnicos, meetups, summits y hasta en charlas con amigos escuchamos algo al respecto, pero sobre todo, los fabricantes de software, en su marcha competitiva, lanzan a una velocidad impresionante herramientas alineadas a este tipo de soluciones, que por un lado favorecen la oferta de opciones, y al mismo tiempo dificultan la decisión sobre la mejor alternativa para cada caso.
El objetivo es claro; simplificar el desarrollo de los Microservicios, al mismo tiempo que se aprovechen al máximo las herramientas que proveen entornos apropiados para el ciclo completo de entrega ágil de los mismos. En otras palabras, no reinventar la rueda y hacer todo de forma manual, sino usar la tecnología para automatizar la mayor cantidad de tareas, las cuales normalmente involucran actividades humanas, lo que se traduce en dependencias, tiempo adicional y posibilidad de error humano. De tal forma que se genera de manera muy natural una estrategia de entrega e integración continua, que, a su vez, podría evolucionar hacia la adopción de prácticas como DevOps.
Spring Boot es una de las tecnologías del ámbito de Spring que se ha vuelto muy popular entre los desarrolladores. Tiene como objetivo simplificar la implementación de aplicaciones al proveer un Framework ligero que elimina la mayoría del trabajo de configuración al crear aplicaciones basadas en Spring, ya que provee la característica RAD (Rapid Application Development)
Esta plataforma está optimizada para entregar, entre otras características; un ambiente para desarrollo y despliegue ágil, arquitecturas altamente escalables y disponibles, flujos de trabajo amigables para DevOps, automatización de tareas, reducción de errores humanos, eficiencia de cómputo multi-tenant, alto nivel de interoperabilidad y portabilidad.
La mezcla de Spring Boot, Cloud Foundry y Oracle Cloud provee una forma para implementar Microservicios, tomando ventaja de las facilidades de programación de Spring Boot, la agilidad de entrega y escalabilidad de Cloud Floundry y de la robustez de Oracle Cloud.
Puedes implementar tu solución usando el Open Service Broker para Oracle Cloud Platform Services. Esto significa que por medio de un Service Broker, es posible conectar las aplicaciones desplegadas en CF, con servicios de Oracle tales como Oracle Database Cloud, MySQL Cloud, Java Cloud, DataHub (Cassandra) y EventHub (Kafka) sin necesidad de desplegarlos en CF y con la facilidad de solo registrarlos. Cabe mencionar que estos servicios están disponibles OnPremise en Oracle Cloud Machine, en Oracle Exadata Cloud Machine, o bien, en Cloud público en Oracle Cloud Infrastructure.
Desplegar aplicaciones Cloud Foundry sobre Oracle IaaS es una segunda opción, y se lleva a cabo por medio de BOSH usando una Cloud Provider Interface, la cual consiste de un conjunto de métodos comunes que permiten trabajar con determinados proveedores de infraestructura Cloud, ayuda a crear y eliminar imágenes, iniciar y detener VMs, preparar redes y ejecutar otras tareas de administración de Cloud.
BOSH es un proyecto que unifica ingeniería de liberación, despliegue y manejo del ciclo de vida del software en Cloud. Puede provisionar y desplegar software sobre cientos de VMs, incluyendo monitoreo, recuperación de errores y actualizaciones de software con cero a mínimo downtime. Fue desarrollado con el propósito de ejecutar los 4 principios de un Realese Engineering moderno; Identifiability, Reproducibility, Consistency y Agility.
Usaremos el Spring Boot Initializer https://start.spring.io/aquí selecciona las siguientes opciones, establece el nombre del proyecto y del paquete, y para las dependencias selecciona las que contiene el pom de Config Server.
Una vez que se ha descargado, descomprime el archivo y en Eclipse importa el proyecto como Existing Maven Projects.
Selecciona la carpeta de código fuente y el archivo pom.xml asociado a éste y continúa la importación.
De tal forma que el proyecto queda de la siguiente manera:
Aquí puedes observar las anotaciones agregadas @RestControllery @RequestMapping, donde la primera le indica a Spring que renderice el string de resultado directamente a quien ejecutó la petición, mientras que la segunda anotación provee información de ruteo, le indica a Spring que cualquier petición HTTP con el path / debe ser mapeada al método home. Cabe mencionar que estas anotaciones no son específicas de Spring Boot sino de Spring MVC.
management.security.enabled = false
En este punto ya puedes desplegar el servicio y probarlo de manera local en una instancia de Tomcat container embebida. Selecciona la clase, clic derecho, Run As, Java Application y selecciona Spring Boot Application si lo solicita Eclipse. Una vez finalizado el despliegue se mostrará un mensaje como este:
http://localhost:8080/ms?message=mymicroservice
Para generar el jar será necesario ejecutar los siguientes comandos desde la consola de línea de comandos. Primero ubícate en la carpeta del proyecto, después ejecuta maven package