introducción a microservicios 30 de agosto 2019 versión para el … · 2019-09-05 · tener...

58
Introducción a Microservicios 30 de Agosto 2019 Versión para el área de ingeniería

Upload: others

Post on 14-Mar-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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

Page 2: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Qué no es microservicios?

MONOLÍTICA

Page 3: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Qué no es microservicios?

MONOLÍTICAMICROSERVICIO

Page 4: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Cómo escalan?

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

Page 5: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Cómo escalan? - Monolítico

Page 6: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Cómo escalan? - Microservicios

Puedo levantarla cantidad de instanciasque se requieren.

Page 7: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

Lo primero...

Usar y mantenermicroservicios es difícil!

Page 8: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Qué es un microservicio?

A DUMB PIPE!!

Page 9: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Qué es un microservicio?

A DUMP PIPE!!

Page 10: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿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

Page 11: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Qué es un microservicio?

¿Ejemplos de MS?

Page 12: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Cómo se comunican los MS?

?

Page 13: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Cómo se comunican los MS?

Exponen APIConsumen API

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

Page 14: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

Existen 3 mantras

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

Page 15: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

Existen 3 mantras

Deben serRÁPIDOS

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

Page 16: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

Existen 3 mantras

Deben serESCALABLES

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

Page 17: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

Existen 3 mantras

Deben soportarRESILIENCIA

Siempre debe haberpisco sour.

Page 18: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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

Page 19: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿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.

Page 20: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Qué es SPRING IO?

Page 21: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿Qué es SPRING IO?

Page 22: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿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/

Page 23: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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

SPRING IOSPRING CLOUD

SPRING CLOUD CONFIGNETFLIX OSS

● EUREKA● RIBBON● HISTRIX● ZUUL

SPRING CLOUD BUS

Page 24: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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.

Page 25: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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?

Page 26: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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

Page 27: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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.

Page 28: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

MICROSERVICES DISCOVERY

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

Page 29: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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.

Page 30: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

BALANCEO DE CARGA

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

Page 31: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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.

Page 32: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

BALANCEO DE CARGA | RIBBON

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

Page 33: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

BALANCEO DE CARGA | RIBBON

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

RIBBON

CLIENT1

CLIENT2

CLIENT3

INSTANCE1

INSTANCE1

INSTANCE1

Page 34: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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%

Page 35: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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

Page 36: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

TOLERANCIA A FALLOS

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

Page 37: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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.

Page 38: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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

Page 39: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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.

Page 40: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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?

Page 41: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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).

Page 42: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

SPRING CLOUD BUS

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

Page 43: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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”.

Page 44: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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.

Page 45: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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

Page 46: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

API GATEWAY

ZUUL

Es el API GATEWAY que nos provee NETFLIX OSS

Page 47: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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/

Page 48: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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/

Page 49: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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/

Page 50: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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/

Page 51: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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/

Page 52: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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/

Page 53: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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/

Page 54: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

¿QUIÉN USA MICROSERVICIOS?

Page 55: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

EJEMPLO MICROSERVICIOS

Page 56: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

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”.

Page 57: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

RECURSOS

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

mfornos/awesome-microservices

https://microservices.io/Microservicios IO

Page 58: Introducción a Microservicios 30 de Agosto 2019 Versión para el … · 2019-09-05 · tener microservicios en Java, PHP, Nodejs, o GO, dependiendo de la necesidad. Le permite organizar

Introducción a Microservicios30 de Agosto 2019