Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener...

Post on 14-Mar-2020

10 views 0 download

Transcript of Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener...

Introducción a Microservicios30 de Agosto 2019Versión para el área de ingeniería

¿Qué no es microservicios?

MONOLÍTICA

¿Qué no es microservicios?

MONOLÍTICAMICROSERVICIO

¿Cómo escalan?

¿Qué pasa si detecto que la mayoría de mis usuarios utilizan una funcionalidad más que otras (prefieren pizza) ?

¿Cómo escalan? - Monolítico

¿Cómo escalan? - Microservicios

Puedo levantarla cantidad de instanciasque se requieren.

Lo primero...

Usar y mantenermicroservicios es difícil!

¿Qué es un microservicio?

A DUMB PIPE!!

¿Qué es un microservicio?

A DUMP PIPE!!

¿Qué es un microservicio?

Ejemplos de MS

CONVERTIR SHAPEFILE A TABLA POSTGIS

RECIBIR POSICIÓN DE UN CARRO (GPS) Y ALMACENARLO EN DB

RECIBIR POSICIÓN DE UN CARRO (GPS) Y ALMACENARLO EN DB

RECIBIR REGISTRO DEL RECOLECTOR, Y ALMACENARLO EN DB

¿Qué es un microservicio?

¿Ejemplos de MS?

¿Cómo se comunican los MS?

?

¿Cómo se comunican los MS?

Exponen APIConsumen API

Por lo tanto, se pueden comportar como servidor, como cliente, O ÁMBAS!

Existen 3 mantras

Si no respetamos estos 3 mantras, no podemos concebir una arquitectura orientada a Microservicios.

Existen 3 mantras

Deben serRÁPIDOS

El 57% de los usuarios abandona una web si tarda más de 3 segundos en cargar

Existen 3 mantras

Deben serESCALABLES

Si, tenemos 20 hijos, no podemos permitir que todos compartan la misma habitación.

Existen 3 mantras

Deben soportarRESILIENCIA

Siempre debe haberpisco sour.

Entorno de desarrollo para microservicios

Hay muchas herramientas, pero para entender las características de los MS. Nos enfocaremos en herramientas para el lenguaje de programación

K̶O̶T̶I̶L̶N̶ JAVA

¿Qué es SPRING IO?

Spring es un framework para el desarrollo de aplicaciones y contenedor de inversión

de control de código abierto para la plataforma Java.

¿Qué es SPRING IO?

¿Qué es SPRING IO?

¿Qué es NETFLIX OSS?

Netflix Open Source Software Center

Conjunto de herramientas para libro uso, utilizadas por netflix para Big Data, Delivery Tools, Security, User Interface...

https://netflix.github.io/

STACK - ¿Cómo podemos administrar los +20 hijos?

SPRING IOSPRING CLOUD

SPRING CLOUD CONFIGNETFLIX OSS

● EUREKA● RIBBON● HISTRIX● ZUUL

SPRING CLOUD BUS

CONFIGURACIÓN

Si no utilizamos una configuración (.env), es fácil arruinar la arquitectura.

Si no definimos que esta sala iba a tener 4 paredes, un suelo, un techo y un monitor, probablemente no estaríamos en un lugar apto para realizar esta presentación.

CONFIGURACIÓN

En un sistema monolítico, tener un archivo de configuración está bien.

Pero para 20 hijos, ¿vamos a tener 20 archivos de configuración?

CONFIGURACIÓN | SPRING CLOUD CONFIG

Spring Cloud Config proporciona soporte del lado del cliente y del servidor para la configuración externa en un sistema distribuido. Con el Servidor de configuración, tiene un lugar central para administrar las propiedades externas de las aplicaciones en todos los entornos

https://spring.io/projects/spring-cloud-config

SPRING CLOUDCONFIG SERVER

CONFIGURACIÓN | SPRING CLOUD CONFIG

● Cuando usamos MS, la conf va afuera de los proyectos

● Los programas usan y modifican el archivo de configuración en tiempo de ejecución

● Podemos utilizar una configuración alojada en GIT, permitiendo manejar diferentes versiones de la misma.

MICROSERVICES DISCOVERY

Dada la gran cantidad de servicios ejecutándose, debemos monitorearlos, detectando su estado, su localización y otros datos relevantes.

MICROSERVICES DISCOVERY | EUREKA

NETFLIX OSS nos proporciona a EUREKA para realizar este trabajo, el cual es un servicio basado en REST y es muy utilizado en la nube de AWS.

BALANCEO DE CARGA

Si un microservicio responde a muchas solicitudes, es posible desplegar varias instancias del mismo, distribuyendo las peticiones que reciben.

BALANCEO DE CARGA | RIBBON

Ribbon es un equilibrador de carga del lado del cliente que brinda mucho control sobre el comportamiento de los clientes HTTP y TCP.

BALANCEO DE CARGA | RIBBON

Ribbon permite distribuir las cargas de los microservicios, distribuyendo las solicitudes entre diferentes instancias de un servicio.

BALANCEO DE CARGA | RIBBON

El balanceo entre instancias, se realiza bajo ciertos parámetros

RIBBON

CLIENT1

CLIENT2

CLIENT3

INSTANCE1

INSTANCE1

INSTANCE1

BALANCEO DE CARGA | RIBBON

Ej: si el servidor que contiene una instancia sobrepasa el 50% de su capacidad, deriva los request a otra instancia. RIBBON

CLIENT1

CLIENT2

CLIENT3

INSTANCE1

INSTANCE1

INSTANCE1

CAPACIDAD > 50%

BALANCEO DE CARGA | RIBBON

El balanceador de carga, finalmente es un programa que rutea los request, es decir, distribuye las peticiones en rutas que referencian a diferentes instancias de la aplicación en diferentes servidores.

RIBBON

CLIENT1

CLIENT2

CLIENT3

INSTANCE1

INSTANCE1

INSTANCE1

TOLERANCIA A FALLOS

Debido a la gran cantidad de servicios a desplegar, es obligatorio gestionar y mitigar los fallos que siempre van a ocurrir.

TOLERANCIA A FALLOS | HISTRIX Hystrix es una biblioteca de latencia y tolerancia a fallas diseñada para aislar puntos de acceso a sistemas remotos, servicios y bibliotecas de terceros, detener la falla en cascada y permitir la resistencia en sistemas distribuidos complejos donde la falla es inevitable.

TOLERANCIA A FALLOS | HISTRIX

¿Qué es la falla en cascada?

Un fallo en un microservicio, puede generar un fallo en microservicios que dependen de él, y por lo tanto, de otros microservicios que dependen de esos microservicios generando un fallo en cascada.

HISTRIX = STOP CASCADE

TOLERANCIA A FALLOS | HISTRIX

HISTRIX, por medio de EUREKA, detecta cuando un microservicio ha fallado, y ejecuta procesos automatizados para levantarlo inmediatamente. Además dispone de un dashboard con detalles de cada uno de los microservicios.

SPRING CLOUD BUS

Si realizamos un cambio en nuestros microservicios, o en la configuración de estos, necesitamos hacer un reboot para actualizar los cambios. ¿Qué pasa con los request que recibe ese microservicio en el momento del reboot?

SPRING CLOUD BUS

Como no necesitamos tener un microservicio que deje de responder a las solicitudes de nuestros usuarios, debemos implementar una entidad encargada de resolver los request que quedaron pendientes (mientras se realiza el reboot).

SPRING CLOUD BUS

SPRING CLOUD BUS NOS PERMITE CREAR UN PROXY PARA TRATAR LOS REQUEST PENDIENTES MIENTRAS SE REALIZAN LAS MODIFICACIONES.

API GATEWAY

Es un sistema intermediario que proporciona una interfaz API REST o WebSocket para hacer de enrutador desde un único punto de entrada, el API Gateway, hacia un grupo de microservicios y/o API de terceros definidos. Interactúa como puerta de enlace “Gateway”.

API GATEWAY

Es especialmente útil para evitar exponer los servicios internos a clientes externos. Una API Gateway separa las API públicas externas de las API internas de microservicio.

API GATEWAY

Seguridad

Permite añadir capas de seguridad que protegen los microservicios; Auth, SSL, Session IP, Session Time Out. Los cuales nos sirven para proteger nuestro entorno de por ejemplo, ataques DoS o inyección de código.

API GATEWAY

API GATEWAY

ZUUL

Es el API GATEWAY que nos provee NETFLIX OSS

Ventajas

Mantenimiento mejorado: cada servicio es relativamente pequeño y, por lo tanto, es más fácil de entender y cambiar.

Mejor capacidad de prueba: los servicios son más pequeños y más rápidos de probar.

Mejor capacidad de implementación: los servicios se pueden implementar de forma independiente.

https://microservices.io/

Ventajas

Políglotas, son independientes del lenguaje y framework, podemos tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad.

Le permite organizar el esfuerzo de desarrollo en torno a múltiples equipos autónomos. Cada equipo (llamado las dos pizzas) posee y es responsable de uno o más servicios.

https://microservices.io/

Ventajas

La aplicación se inicia más rápido, lo que hace que los desarrolladores sean más productivos y agiliza las implementaciones

Aislamiento de fallas mejorado. Por ejemplo, si hay una pérdida de memoria en un servicio, solo ese servicio se verá afectado. Los otros servicios continuarán manejando las solicitudes

https://microservices.io/

Ventajas

Elimina cualquier compromiso a largo plazo con una pila de tecnología. Al desarrollar un nuevo servicio, puede elegir una nueva pila de tecnología. Del mismo modo, al realizar cambios importantes en un servicio existente, puede volver a escribirlo utilizando una nueva pila de tecnología.

https://microservices.io/

Desventajas

Los desarrolladores deben lidiar con la complejidad adicional de crear un sistema distribuido. Los desarrolladores deben implementar el mecanismo de comunicación entre servicios y lidiar con fallas parciales

Las herramientas / IDE para desarrolladores están orientadas a la creación de aplicaciones monolíticas y no brindan soporte explícito para desarrollar aplicaciones distribuidas.

https://microservices.io/

Desventajas

Complejidad de implementación. En la producción, también existe la complejidad operativa de implementar y administrar un sistema compuesto por muchos servicios diferentes.

Las herramientas / IDE para desarrolladores están orientadas a la creación de aplicaciones monolíticas y no brindan soporte explícito para desarrollar aplicaciones distribuidas.

https://microservices.io/

Desventajas

Aumento del consumo de memoria. La arquitectura de microservicio reemplaza las instancias de aplicaciones monolíticas N con instancias de servicios NxM. Si cada servicio se ejecuta en su propia JVM (o equivalente), que generalmente es necesario para aislar las instancias, entonces hay una sobrecarga de M veces el tiempo de ejecución de JVM.

https://microservices.io/

¿QUIÉN USA MICROSERVICIOS?

EJEMPLO MICROSERVICIOS

NETFLIX MICROSERVICESCaptura real del ingeniero de Netflix Bruce Wong de los microservicios que se ejecutan en Netflix, alrededor de 2014. “Por ahora, una imagen similar podría parecerse a una pared azul sólida”.

RECURSOS

https://github.com/mfornos/awesome-microservices

mfornos/awesome-microservices

https://microservices.io/Microservicios IO

Introducción a Microservicios30 de Agosto 2019