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.
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 @RestController y @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.
http://localhost:8080/ms?message=mymicroservice
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.
Una de las
opciones más populares entre los desarrolladores para este tipo de
implementaciones es usar una combinación de elementos que involucran Spring
Boot y Pivotal Cloud Foundry.
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)
Por otro
lado, Cloud Floundry es una plataforma como servicio (PaaS) open source propiedad
de Pivotal Software. Está disponible como un paquete de software stand-alone
que puede ser desplegado en distintos ambientes de proveedores Cloud como AWS,
Google CP, Open Stack, entre otros.
En fechas
recientes, Oracle anunció la integración con la plataforma de Cloud Foundry
derivado de la implementación de un Open Service Broker que soporta Oracle Cloud
Platform Services en Cloud Foundry workloads. Además de que abrió la interfaz BOSH Cloud Provider Interface que permite el despliegue de cargas de
trabajo de distintos proveedores, tales como Cloud Foundry, sobre
infraestructura Cloud de Oracle. Misma que estará disponible en los próximos
meses.
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.
Tutorial
En este
momento, mientras Oracle avanza en afinar los detalles de la integración con
estas herramientas, comencemos por familiarizarnos con la combinación Spring
Boot y Cloud Foundry.
En este
simple ejercicio desarrollaremos un servicio REST con Spring Boot, que pudiera
ser eventualmente complementado para ser un Microservicio, y lo desplegaremos
en Cloud Foundry, lo que nos proveerá de características como mecanismos de
aprovisionamiento automatizado, configuración de servicios externos, como por
ejemplo bases de datos, y un entorno de ejecución simplificado que ya contiene
atributos necesarios para implementar una arquitectura de Microservicios.
Para este
ejemplo desplegaremos nuestro servicio en Pivotal Web Services, el cual es uno
de los proveedores IaaS que soporta aplicaciones Cloud Floundry. Por lo que es
necesario crear una cuenta de prueba, si no tienes alguna ya, puedes obtenerla en
el sitio de Pivotal https://pivotal.io/get-started
Los
requerimientos para implementar el ejercicio son:
·
Java JDK 1.8
https://java.com/en/download/
·
Maven 3.5+ https://maven.apache.org/download.cgi
·
IDE de desarrollo,
en este caso Eclipse https://www.eclipse.org/downloads/
·
Cloud Foundry
CLI https://docs.cloudfoundry.org/cf-cli/install-go-cli.html
1. Crear la
aplicación de Spring Boot
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.
2. Importar la
aplicación en Eclipse
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.
Una vez
completada la importación, complementa la clase autogenerada con el siguiente
código:
package com.example.ms.cf.oracle.microservicesSB;
import
org.springframework.boot.SpringApplication;
import
org.springframework.boot.autoconfigure.SpringBootApplication;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestParam;
import
org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class
MicroservicesSbApplication {
public static void
main(String[] args) {
SpringApplication.run(MicroservicesSbApplication.class, args);
}
}
@RestController
class MessageRestController {
@RequestMapping("/ms")
String
getMessage(@RequestParam(value = "message") String message) {
String response = "The
message from request: " + message;
System.out.println(response);
return response;
}
}
Aquí puedes observar las anotaciones agregadas @RestController y @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.
3. Agregar
archivo de configuración del proyecto
En la carpeta src/main/resources crea un archivo llamado bootstrap.properties y agrega las siguientes líneas
server.contextPath = /ms
management.security.enabled = false
4. Probar el
servicio localmente
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:
Ejecuta la
prueba en el explorador de internet en la ruta:
El servicio
está ahora en ejecución y funcionando. Lo siguiente es enviarlo a Cloud
Foundry.
5. Generar el
desplegable con Maven
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
Esto
generará el archivo llamado microservicesSB-0.0.1-SNAPSHOT.jar en la carpeta target.
6. Crear el
archivo de configuración de despliegue
En la
carpeta raíz del proyecto crea un archivo llamado manifest.yml y agrega las siguientes líneas:
---
applications:
- name: microservicesSB
random-route: true
path: target/microservicesSB-0.0.1-SNAPSHOT.jar
memory: 768M
instances: 1
Este archivo
ayudará a desplegar la aplicación en Cloud Foundry y configurar las opciones
requeridas de memoria, instancias creadas, ubicar el jar, entre otras cosas
más.
7. Desplegar la
aplicación en Cloud Foundry
Ahora es
turno de CF de hacer el trabajo, para desplegar la aplicación será necesario
usar los comandos de Cloud Floundry CLI y tener la cuenta de Pivotal WS activa
y a la mano. Cambia de ubicación a la carpeta del proyecto, ejecuta el comando
de login y provee usario y password.
cd
/Users/sandra/Proyectos/Eclipse/SpringBoot/microservicesSB
cf login -a api.run.pivotal.io
8. Probar el
servicio desplegado
Comentarios
Publicar un comentario