introducción a microservicios 30 de agosto 2019 versión para el … · 2019-09-05 · tener...
TRANSCRIPT
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