Como ya hemos visto en el anterior post, una introducción a lo que es la arquitectura de microservicios, en este post nos vamos a centrar en la visión del desarrollador describiendo el framework Spring Cloud.
Spring Cloud
El framework está construido sobre Spring Boot, el cual proporciona auto-configuraciones básicas para facilitar el desarrollo de los microservicios, además de proporcionar ya un contenedor de aplicaciones (Tomcat, Jetty, Undertow) embebido.
Spring Cloud le ofrece al desarrollador las herramientas necesarias para la construcción de patrones comunes en sistemas distribuidos. Gracias a ello podremos reducir el tiempo de desarrollo de los microservicios.
Alguno de estos patrones comunes son: | |||
Autodescubrimiento | Seguridad distribuida | Testing de contratos distribuidos | Circuit breaker |
Configuración centralizada | Enrutamiento | Balanceo de carga | Traceo de llamadas |
Componentes
A continuación se describen los módulos que más interesantes nos parecen de Spring Cloud. Hay que tener en cuenta que el proyecto está muy vivo, en evolución constante. De manera adicional, en próximos artículos trataremos cada uno de ellos más en detalle.
Solo como aclaración, algunos componentes de Spring Cloud son integraciones de software desarrollado por Netflix, como Eureka, Hystrix, Zuul y Ribbon.
Eureka
Encargado del autodescubrimiento con el patrón vía cliente, los microservicios se registran con su nombre en el servidor de Eureka, donde dejan su IP y su puerto.
Si cualquier microservicio necesita comunicarse, solo debe saber su nombre, para ello le preguntará Eureka su localización y le devolverá todas las IPs y puertos. Será el propio microservicio el encargado del balanceo de peticiones.
Spring Cloud Config
Encargado de la centralización de la configuración, está pensado para emplearse en varios entornos. También proporciona seguridad a la configuración.
Spring Cloud Security
Ofrece seguridad centralizada para el sistema distribuido, usualmente está pensado para ser empleado con un servicio de gestión de identidad. Usa OAuth2, lo que permite crear inicios únicos de sesión y gestión de tokenes.
Spring Cloud Contract
Se usa para hacer testing sobre las integraciones entre microservicios, para ello usa el patrón Consumer Driven Contracts, que de una forma resumida se enfoca en crear contratos y validarlos.
Ribbon
Su funcionalidad es la del balanceo de carga entre llamadas de los microservicios. Se integra totalmente con Eureka.
Feign
Nos permite hacer clientes rest fácilmente de una declarativa. Feign crea un balanceador de Ribbon para integrarse con todo el ecosistema.
Hystrix
Implementa el patrón circuit breaker, con el que se controla el error de los microservicios mejorando la resilencia de los mismos.
El patrón circuit breaker usa semáforos y métricas para indicar si el servicio funciona correctamente. Además ofrece un dashboard (Turbine) donde se agregan las métricas que usa Hystrix.
Zuul
Actúa como gateway sobre nuestros microservicios. Será la puerta de entrada de nuestro ecosistema de microservicios, disponiendo de capacidad para añadir filtros y seguridad. Además, para Netflix cumple los siguientes casos de uso:
Casos de uso para Netflix | ||
Autenticación | Canary tests | Seguridad |
Insights | Enrutamiento dinámico | Manejo de la respuesta estática |
Pruebas de estrés | Migración de servicios | Gestión del tráfico activo / activo |
Spring Cloud Sleuth
Implementa una solución de traceo de llamadas distribuido para Spring Cloud, va añadiendo los identificadores a cada llamada y puede luego agregarlas a Zipkin o HTrace. También puede loguearse por el log del sistema. Muy necesario para la monitorización de la plataforma.
Referencias
≡ Patrón de autodescubrimiento por lado del cliente ≡ Descripción de Consumer-Driven Contracts ≡ Patrón Circuit Breaker ≡ Página del proyecto Spring Cloud ≡