Icono del sitio ICPINFO

Microservicios con Spring Boot

En el siguiente tutorial vamos a cubrir detalladamente todo el ciclo de vida una aplicación de microservicios en java con Spring Boot.
Partiremos desde definición de la arquitectura hasta la puesta en producción en Google Cloud con Kubernetes mediante buenas prácticas DevOps.
Se hace uso de integración y entrega continua y proporcionamos el código fuente generado, las imágenes de los contenedores construidos, las url de las aplicaciones desplegadas 100% funcionales, así como la definición del pipeline que se encarga de la automatización total de todo el proceso de entrega.

Microservicios y conceptos básicos.

¿Qué es una arquitectura de microservicios? Es una forma de diseñar aplicaciones de tal forma que puedan ser utilizadas y desplegadas de forma independiente.

No existe una definición concreta para este estilo de arquitectura, pero si hay ciertos patrones comunes entre ellas. Generalmente estas aplicaciones implementan una funcionalidad atómica del negocio, facilitan el despliegue automatizado, cuentan con inteligencia de endpoints y tiene un control descentralizado de lenguajes de programación y motores de base de datos.

Antes de comenzar necesitamos familiarizarnos con los siguientes conceptos:

Servidor de configuración central

Este componente se encargará de centralizar y proveer remotamente la configuración a cada microservicio. Usaremos Spring Cloud.

Servicio de registro / discovery

Este servidor centralizado será el encargado de proveer los endpoints de los servicios para su consumo. Todo microservicio y sus réplicas se registrarán automáticamente a medida que se vayan desplegando.. Usaremos Netflix Eureka.

Balanceo de carga y redireccionamiento dinámico (Load balancer)

Este patrón de implementación permite el balanceo entre distintas instancias de forma transparente a la hora de consumir un servicio. Usaremos Netflix Ribbon.

Tolerancia a fallos (Circuit breaker)

Mediante este patrón conseguiremos que cuando se produzca un fallo, este no se propague en cascada por todo el pipe de llamadas, y poder gestionar el error de forma controlada a nivel local del servicio donde se produjo. Usaremos Netflix Hystrix.

Servidor perimetral / exposición de servicios (Edge server)

Será un gateway en el que se expondrán los servicios a consumir. Usaremos Netflix Zuul.

Servidor de Autorización

Para implementar la capa de seguridad (recomendable en la capa de servicios API). Usaremos Spring Security.

Tecnologías y herramientas utilizadas en la arquitectura.

Como entorno de desarrollo se utilizó una máquina virtual con Red Hat Enterprise Linux versión 7.5. Pero como todas las tecnologías y herramientas utilizadas además de ser libres, son multiplataforma, son perfectamente compatible con instalaciones de Windows, MAC u otra distribución de Linux.

El código fuente de las aplicaciones, de los ambientes dockerizados y de la definición del pipeline de CI-CD están ubicados públicamente en GitHub y DockerHub respectivamente en los perfiles:

https://github.com/renemartinezb86/jhipster-microservices
https://hub.docker.com/u/rbravet/

Como agentes de construcción e integración continua se utilizan Docker, Maven y Jenkins con los plugins de GitHub, BlueOcean, Docker y SonarQube.

Para las pruebas unitarias, de performance, cobertura y calidad de código se utilizaron respectivamente: jUnit, Gatling, Jacoco y Sonar.

Las tecnologías de monitoreo usadas son Elasticsearch, Logstash y Kibana.

Como herramientas de generación de código y gestor de dependencias se utilizó jHipster, Maven y Npm.

Como motores de base de datos tenemos PostgreSQL como base de datos relacional y MongoDB como base de dato documental.

Como herramienta auxiliar para administrar los contenedores Docker utilizamos una imagen de Portainer.

Salir de la versión móvil