Tema 2 Microservicios Vídeo visto Flashcards
¿Qué son MICROSERVICIOS?
Arquitectura de aplicaciones independientes especializada en un área concreta de nuestro negocio.
Orientada a servicios SOA (Service Oriented Architecture)
Domain Driven Design (DDD)
- Término relacionado con Microservicios.
- Enfocado a que la estructura y el lenguaje del servicio (Clases, métodos, variables, etc..), se parezcan más al contexto del dominio de negocio en el que se ejecutan.
Cada Microservicio, se comunica con otro Microservicio, por medio de..
API’S
Nuevos problemas de Microservicios:
- Latencia
- La red puede fallar y VA A FALLAR
- Consistencia de datos
- Sobrecarga de operaciones
- Resolución de problemas
- Demasiadas opciones para elegir
¿Qué es un TOPIC?
- Es una herramienta de suscripción, para enviar mensajes a varios nodos.
- Se usa en microservicios.
- Para trabajar de forma asíncrona.
¿Que son Protocol Buffers en gRPC?
- Son lo que define la estructura del servicio gRPC
- Son equivalentes a WSDL en SOAP u Open API para REST.
- Es un formato binario.
- Tienen extensión .proto
- Google ha creado el programa protoc, para generar el código para el cliente y para el servidor.
Métodos para comunicar Microservicios de forma Síncrona:
- RPC - Serialización (en Binario) por el protocolo gRPC. Es REST
- SOAP - Muy usado en la AGE por el ENI
GraphQL
Se usa para hacer “Queries”, y que nos devuelvan solo los datos que pedimos, no todo lo demás.
Primitivas:
- Resolver: Para hacer las consultas
- Mutation: Para modificaciones
- Suscriptions
Broker de Mensajes.
Es como una base de datos.
Son intermediarios entre Microservicios para comunicación asíncrona.
Tenemos dos conceptos:
- Colas, que son más relaciones de uno a uno 1:1
- Topics que son más de uno a muchos 1:N
Es transaccional. Se hace o si no, se deshace, por lo que se garantiza la entrega y la confianza.
Productos de brokers (KRAG) de mensajes:
BROKERS KRAG
- KAFKA (APACHE)
- RABBITMQ
- ACTIVEMQ (APACHE)
- GOOGLE CLOUD PUB/SUB
¿Qué es SAGA?
- Es un patrón de compensación, por que en Microservicios no tenemos ACID.
- Permite hacer una transacción inversa, para hacer una especie de Rollback. Que es por ejemplo: Si hacemos una transacción con el valor +5, con SAGA podemos hacer otra transacción con el valor -5, de ahí lo de inversa.
CQRS
Command Query Responsibility Segregation
Para separar queries o consultas, de Create, Update y Delete..
Porque el número de queries que se hacen normalmente son muy altas.
API GATEWAY
Es un patrón al que primero accedemos con nuestro dispositivo o app. También hace la autentificación.
Puerta de entrada a los Microservicios, pero aislándolos del exterior.
Centraliza las peticiones.
Productos de Netflix (ZHER):
ZHER
- Spring Cloud Netflix ZUUL-> API GATEWAY
- Spring Cloud Netflix HYSTRIX-> Patrón Circuit Breaker
- Spring Cloud Netflix EUREKA-> Directorio de servicios
- Spring Cloud Netflix RIBBON-> Balanceo de carga
Service Mesh
- Compuesta por Envoy e Istio.
- Abstrae de todo el trabajo duro.
Productos Service Mesh (MIPJEGEK):
MIPJEGEK
- MAISTRA- Engloba a Kiali, Jaeger y Prometheus
- ISTIO- Centralización
- ENVOY- Abstracción SIDECAR/PROXY
- ELASTICSEARCH- Trazabilidad (Motor de búsqueda)
- JAEGER- Trazabilidad
- GRAFANA- Observabilidad
- PROMETHEUS- Observabilidad
- KIALI- Consola de administración para Istio
Frameworks Microservicios:
- Java: Spring Cloud (Spring Boot), Quarkus, Micronaut, Helidon
- Python: Flask, Nameko, CherryPy
- NodeJS (V8)
- .NET
- Microprofile (Jakarta)
Características de Microservicios:
- Independientemente Desplegables
- Independientemente Escalables.
- Se distribuye la responsabilidad.
- Mezclan tecnologías(Java, .net, etc).
- DDD. Domain Driven Design
- Gobernanza, gestión, versiones.
- Acoplamiento y Cohesión.
- Usa diferentes lenguajes
- Cada servicio puede tener su propia BBDD.
Service Registry Pattern
- Es un registro o base de datos de los servicios, sus instancias y su localización, que están en el momento de la consulta, vivos y funcionando en el sistema.
- Netflix Eureka, es una implementación de Service Registry
¿Qué es Circuit Breaker?
- Protege cuando hay algún servicio caído.
- Lo cierra y lo aisla para que no falle el resto de servicios.
- Sigue los siguientes pasos:
- Lo detecta
- Deja de enviar peticiones
- Se recupera
- Lo vuelve a enviar
Comunicación asíncrona
- Por Broker de mensajes
- Por Topics
Bounded Contexts
Es una técnica que se usa para dividir un modelo muy grande de negocio, en partes más pequeñas enfocadas a su propio trabajo y más manejables. Que se convierten en Microservicios.
¿Qué mecanismos de comunicación hay en Microservicios?
- Síncrona, con peticiones REST o RPC y SOAP.
- Asíncrona, con Broker de mensajes (Dirigidas a Eventos, con TOPIC) y con datos compartidos, que hace uso de un fichero al que acceden varios.
¿Qué relevancia tiene Netflix en Microservicios?
Fué la primera empresa que sacó software para Microservicios.
Parecido a Circuit Breaker, tenemos..
Bulkheads, que son como cámaras estancas en un barco. Se usa para separar componentes y aislarlos, para que los errores no se propagen.
Cosas de gRPC:
- Request/Response basado en HTTP/2, que permite Streaming y Bidirección
- Protocol Buffer
ENVOY
- AKA SIDECAR/PROXY
- SE COLOCA JUNTO AL MICROSERVICIO, PARA ABSTRAERLO DEL TRABAJO DE BAJO NIVEL.
- TRABAJA JUNTO CON ISTIO, QUE ESTÁ EN LA PARTE DEL PANEL DE CONTROL.
ISTIO
- CENTRALIZA TODAS LAS PETICIONES DE LOS SIDECARS.
¿Qué alternativas tenemos en Microservicios, para transacciones ACID?
- CQRS - Consulta vs Create, Update y Delete
- 2PC - 2 Phase Commit
- SAGA - Transacciones de compensación o inversas
Principios de despliegue de Microservicios:
-
Ejecución aislada
– Ejecuta los microservicios de manera aislada, con sus propios recursos computacionales, y que su ejecución no impacte a otros microservicios que se ejecuten cerca. -
Automatización
– Según crezca el número de microservicios, la automatización cobra mayor importancia (CI/CD, DevOps) -
IaC
– Representa la configuración de tu infraestructura para facilitar los despliegues. Almacénalo en un control de versiones para que todo pueda ser recreado -
Despliegues Zero-Downtime
– Intenta desplegar microservicios sin tener downtime para los usuarios o para tu servicio -
Estados deseados (declarativo)
– Usa una plataforma que mantenga tu(s) microservicio en un estado definido, lanzando nuevas instancias si es necesario
Modos de despliegue de Microservicios:
1- Máquina física
a. La instancia del microservicio se ejecuta en una máquina física directamente, sin virtualización
2- Máquina virtual
a. Se ejecuta en una máquina virtual
3- Contenedor
a. Se ejecuta en un contenedor separado, en un host físico o virtual. La ejecución puede ser gestionada por un orquestador como k8s
4- Contenedor de Aplicaciones
a. El microservicio se ejecuta dentro de un contenedor de aplicaciones que administra otras aplicaciones, normalmente del mismo runtime. Tomcat, WebLogic.
5- PaaS
a. Instancias administradas, abstrayéndonos de toda la gestión inferior y que corren nuestros microservicios. Heroku, Google AppGengine, AWS Beanstalk
6- FaaS
a. La instancia del microservicio se despliega como una función como AWS Lambda (Plataforma sin servidor), Google Cloud Functions o Azure Functions
Resiliencia
Ante un fallo, podemos tomar dos decisiones:
- TIMEOUTS
- REINTENTOS
IDEMPOTENCIA
También se observa la idempotencia en Microservicios, para que los cambios se sincronizen y no afecten al funcionamiento.