Noticias

20 de julio de 2017

Arquitectura de microservicios con Spring & Netflix OSS

Una de las tendencias tecnológicas que están en pleno auge es el uso de microservicios en el desarrollo de soluciones software. Una arquitectura orientada a microservicios, consiste en un sistema distribuido que alberga pequeñas aplicaciones independientes, que se ejecutan y despliegan de forma individual, según las necesidades y que, a su vez, se comunican con la parte cliente o incluso entre ellas a través de sus API.

Este tipo de arquitecturas surge como alternativa y trae una serie de ventajas respecto a las arquitecturas monolíticas. La principal es la posibilidad de crear sistemas basados en aplicaciones independientes de poca envergadura, que se despliegan de forma autónoma, que a su vez se pueden combinar, reutilizar o eliminar, sin que esa modificación afecte al resto de los componentes y sin que se produzca ninguna interrupción. Además la configuración individual nos permite tal flexibilidad, que incluso pueden estar escritos con diferentes lenguajes de programación.

Existen en el mercado tecnologías como Spring y Netflix OSS sobre las que podemos basar una arquitectura de tal envergadura, ya que nos ofrecen herramientas y variedad de tecnologías para este fin.

Por ejemplo, de las tecnologías que nos ofrece Spring, a través de Spring Boot podemos crear estos microservicios independientes, permitiéndonos levantar una aplicación con muy poca configuración y en poco tiempo, gracias a la posibilidad de utilizar servidores de aplicaciones embebidos.

En cuanto al soporte de Spring a sistemas distribuidos, Spring Cloud junto con las herramientas de Netflix OSS, proporciona herramientas para la orquestación y monitorización de los microservicios y otros componentes que formen parte de la arquitectura.

Dentro de Spring Cloud, el Config Server, ligado a un repositorio Git, centraliza toda la configuración de todos los microservicios. Spring Cloud Security ofrece la integración de una capa de seguridad en el sistema, bien con seguridad básica o mediante servidores de autenticación OAuth2. Por último, Spring Cloud Sleuth puede utilizarse junto con un servidor Zipkin, para rastrear y seguir la trazabilidad de las peticiones.

Una arquitectura de estas características debe proporcionarnos alta disponibilidad, permitirnos tener múltiples instancias con múltiples servicios, arrancándose y ejecutándose a la vez, si es necesario. Con este fin, Spring Cloud se apoya en las herramientas de Netflix OSS.

Eureka Discovery Service es una herramienta que actúa como service registry. Las instancias de cada uno de los microservicios se registran en un servidor Eureka, de tal forma que cuando otro componente requiera conectar con una de estas instancias, solo tiene que contactar con Eureka. A su vez, Zuul es un punto de entrada de todas las peticiones, ya que actúa como enrutador y filtro de éstas. Zuul se encarga de pedir una instancia de un microservicio a Eureka y de su enrutamiento hacia el servicio final, apoyándose en Ribbon que es el balanceador de carga. Por otro lado, Hystrix nos permite monitorizar latencias y tolerancia de fallos, así como su mayor característica: ejercer de Circuit breaker. En el caso que una petición falle un gran número de veces seguidas, Hystrix bloquea los fallos en cascadas, aislando los puntos de acceso entre servicios y permitiendo la configuración de fallbacks, mientras que se recupera la aplicación.

Estas son algunas de las tecnologías que podemos utilizar para crear una arquitectura de este tipo, sin embargo, el punto clave reside en definir bien las necesidades de una arquitectura de microservicios, es decir, los componentes y cómo se van a desplegar cada uno. Aunque sea una solución de moda, no está exenta de cierta complejidad y hemos de tener claro si necesitamos o no una solución de esta magnitud. Si una solución puede ser dividida en partes independientes y a su vez esas partes tienen intención de crecer y escalar, estaríamos hablando de un desarrollo susceptible a este tipo de soluciones.

Esta tecnología está enfocada a la integración continua, reutilización, mayor productividad y nivel de abstracción, con el fin de producir servicios software de alto valor de forma ágil y rápida, al menor coste.