Arquitectura de Microservicios con Netflix

Publicado por

Con el auge de las nuevas plataformas de análisis de datos en streaming, también ha proliferado el diseño de sistemas con componentes que encapsulan funcionalidades sencillas, donde desarrollar y reutilizar componentes o servicios se realice de forma sencilla. En este tipo de arquitecturas es básico la escalabilidad horizontal, por lo que debe ser obligatorio trabajar con tecnologías como Kubernetes y Docker.

Alrededor de un sistema Big Data van surgiendo nuevas necesidades relacionadas con los datos que se encuentra en movimiento o en reposo para después explotarlos con un cuadro de mandos o sistemas de monitorización operativa.

Estos componentes idealmente se despliegan sobre entornos de contenedores por lo que tenemos que tener en cuenta ciertas características de estos entornos. Por ejemplo no saber en que máquina se va a desplegar el artefacto, o que instancia va a recibir la petición. Estos contenedores tienen que ser aprovisionados de forma automática, sin acciones manuales por parte de operaciones o desarrollo.

**A la finalización de este artículo he comprendido que Netflix está embarcado en una nueva arquitectura de microservicios sustituyendo las tecnologías de las que os hablo, pero no por ello dejan de ser válidas.

  • Spring Cloud Config: servidor central de configuración
  • Netflix Eureka: servicio de registro o descubrimiento de servicios
  • Netflix Ribbon: balanceo de carga y redireccionamiento
  • Netflix Histrix: tolerancia a fallos mediante circuit breaker
  • Netflix Zuul o Spring Cloud Gateway: servidor perimetral para la exposición de servicios
  • Spring Security JWT: servidor de autorización y capa de seguridad

Spring Cloud Netflix Eureka

Es un microservicio REST (Representational State Transfer) que se utiliza con el objetivo de registrar y localizar los microservicios existentes en el ecosistema, informar de su localización, estado y alguna métrica operacional. Facilita el balanceo de la carga entre las instancias de los microservicios y la tolerancia a fallos.

En Netflix, Eureka se utiliza para los siguientes propósitos, aparte de ser un componente crítico en la distribución de la carga en capas intermedias

  • Ayuda a Netflix Asgard, un servicio open source que facilita los despliegues en la nube:
    • Agiliza la marcha atrás de versiones en caso de que se produzca algún problema, evitando el relanzamiento de 100 instancias que es un proceso mucho más lento
    • Cuando trabajamos en entornos de despliegue continuo, Asgard facilita detener la propagación de nuevas versiónes al resto de instancias en caso de problemas
  • Para los despliegues de Cassandra permite eliminar el tráfico de ciertas instancias para tareas de mantenimiento
  • Para transportar metadatos específicos de aplicaciones sobre servicios que necesiten estar informados.

El microservicio, que se define como cliente de Eureka, cuando levanta se comunica con el server para informarle de que está disponible para recibir solicitudes. El estado se consultará cada 30sg, si tras tres intentos no se recibe contestación se eliminará del registro de instancias disponibles.

Spring Cloud Netflix Ribbon

Ribbon es una librería para la Inter Comunicación de Procesos (IPC), conocido también como llamadas a procedimientos remotos (RPC). El modelo de uso primario implica llamadas REST con soporte para varios esquemas de serialización. Ribbon proporciona las siguientes funcionalidades:

  • Balanceo de carga
  • Tolerancia a fallos
  • Soporte para múltiples protocolos de forma asíncrona o reactiva (HTTP, TCP, UDP)
  • Permite cacheo y procesamiento por lotes
  • Integración con servidores de descubrimiento como Eureka o Consul

Cuando Ribbon recibe una petición a un servicio externo, lo primero que hace es consultar al servidor de Eureka, como se encuentra dicho micro, y decidirá a que instancia de las disponibles dirigir la petición entrante. Estás políticas de encaminamiento son configurables y existen varios tipos de direccionamientos.

Spring Cloud Netflix Histrix

Hystrix es una biblioteca de latencia y tolerancia a fallos diseñada para aislar puntos de acceso a sistemas remotos, servicios y bibliotecas de terceros, detener el fallo en cascada y permitir la resiliencia en sistemas distribuidos complejos donde los errores son inevitable.

Spring Cloud Gateway vs Zuul

El Cloud Gateway está construido sobre el ecosistema de Spring, que incluye: Spring 5, Spring Boot 2 y Project Reactor. Esto hace que sea compatible con conexiones de larga duración (Websockets) y tenga una mejor integración con Spring.

Spring Cloud Gateway tiene como objetivo proporcionar una manera simple pero efectiva de enrutar llamadas a las APIs y proporcionar funcionalidades transversales como: seguridad, monitorización, métricas y resiliencia.

Zuul se basa en servlet 2.5 (funciona con 3.x), usando API de bloqueo y no admite conexiones de larga duración, como websockets.

Spring Cloud Gateway envía las solicitudes al Gateway Handler Mapping que determina qué se debe hacer con las solicitudes que coinciden con una ruta específica

Combina las rutas usando la infraestructura Spring WebFlux HandlerMapping. Incluye muchas built-in Route Predicate Factories. Todos estos Predicates coinciden con diferentes atributos de la solicitud HTTP pudiéndolos combinarlos.

Hace uso de la API Actuator, una conocida biblioteca Spring-Boot que proporciona varios servicios listos para monitorear la aplicación

Operaciones: integración continua + despliegue continuo

Para una correcta puesta en producción y con el fin de mantener todo el proceso automatizados es necesario hacer uso de las siguientes herramientas:

  • Jenkins/Ansible: pipeline de integración
  • Github: publicación de código
  • Maven: plugin Java para la construcción
  • Junit: test unitarios
  • Sonar: reglas para medir la calidad del software
  • ELK: monitorización
  • Dockerhub: contenedores para microservicios
  • Netflix OSS: software open source proporcionado por Netflix

Esto da para otro artículo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s