Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Microservicios Desacoplados: Una DB por Cada Un...

Microservicios Desacoplados: Una DB por Cada Uno - dotnet Latam day 2024

Lautaro Carro

October 24, 2024
Tweet

More Decks by Lautaro Carro

Other Decks in Technology

Transcript

  1. preencoded.png Microservicios Desacoplados: Una DB por Cada Uno En el

    mundo actual, las aplicaciones son cada vez más complejas y requieren soluciones que permitan la escalabilidad, la flexibilidad y la independencia de los componentes. La arquitectura de microservicios surge como respuesta a estas necesidades, ofreciendo una forma modular y distribuida de construir sistemas. by Lautaro Carro
  2. { "name": "Lautaro Carro", "username": "@lauchacarro ", "award": "Microsoft MVP

    ", "certifications": [“AZ-900", “AZ-204"] "activities": ["Latino .NET Online", "Rest Of My Cloud"] }
  3. preencoded.png ¿Por qué utilizar microservicios? 1 Independencia Los microservicios son

    unidades independientes, lo que facilita el desarrollo, la implementación y el mantenimiento. 2 Escalabilidad Cada microservicio se puede escalar de forma independiente, optimizando el uso de recursos. 3 Flexibilidad La arquitectura de microservicios permite la adopción de nuevas tecnologías y lenguajes de programación.
  4. preencoded.png Ventajas de la arquitectura de microservicios Desarrollo Ágil Los

    equipos de desarrollo pueden trabajar de forma independiente en microservicios específicos. Resiliencia La falla de un microservicio no afecta el funcionamiento del resto del sistema. Mejoramiento Continuo Los microservicios se pueden actualizar y desplegar de forma independiente, sin afectar al sistema completo.
  5. preencoded.png Patrones erroneos de integración de datos en microservicios Base

    de Datos Compartida Se utiliza una base de datos centralizada para compartir datos entre microservicios. API de Productos API de Ventas API de Usuarios API de Envios
  6. preencoded.png Patrones erroneos de integración de datos en microservicios Base

    de Datos Compartida Se utiliza una base de datos centralizada para compartir datos entre microservicios. API de Productos API de Ventas API de Usuarios API de Envios
  7. preencoded.png Patrones erroneos de integración de datos en microservicios Base

    de Datos Compartida Se utiliza una base de datos centralizada para compartir datos entre microservicios. API de Productos API de Ventas API de Usuarios API de Envios
  8. preencoded.png Patrones erroneos de integración de datos en microservicios API

    de Productos API de Ventas API de Clientes API de Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Productos_Detalles Inventario_Productos Categorias_Productos Envios_Detalles Paquetes Clientes_Envios
  9. preencoded.png Base de datos independiente para cada microservicio Consistencia Cada

    microservicio tiene su propia base de datos, asegurando la consistencia interna del servicio. Autonomía Los microservicios pueden evolucionar y actualizarse sin afectar las bases de datos de otros servicios. Escalabilidad La base de datos de cada microservicio se puede escalar de forma independiente, según las necesidades del servicio.
  10. preencoded.png Patrones erroneos de integración de datos en microservicios API

    de Productos API de Ventas API de Clientes API de Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Productos_Detalles Inventario_Productos Categorias_Productos Envios_Detalles Paquetes Clientes_Envios
  11. preencoded.png Patrones erroneos de integración de datos en microservicios API

    de Productos API de Ventas API de Clientes API de Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Productos_Detalles Inventario_Productos Categorias_Productos Envios_Detalles Paquetes Clientes_Envios
  12. preencoded.png Patrones erroneos de integración de datos en microservicios API

    de Productos API de Ventas API de Clientes API de Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Envios_Detalles Paquetes Clientes_Envios Productos_Detalles Inventario_Productos Categorias_Productos
  13. preencoded.png Patrones erroneos de integración de datos en microservicios API

    de Productos API de Ventas API de Clientes API de Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Productos_Detalles Inventario_Productos Categorias_Productos Envios_Detalles Paquetes Clientes_Envios Productos_Detalles Inventario_Productos Categorias_Productos
  14. preencoded.png Patrones erroneos de integración de datos en microservicios API

    de Productos API de Ventas API de Clientes API de Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Productos_Detalles Inventario_Productos Categorias_Productos Envios_Detalles Paquetes Clientes_Envios
  15. preencoded.png Patrones erroneos de integración de datos en microservicios API

    de Productos API de Ventas API de Clientes API de Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Productos_Detalles Inventario_Productos Categorias_Productos Envios_Detalles Paquetes Clientes_Envios
  16. preencoded.png Patrones erroneos de integración de datos en microservicios API

    de Productos API de Ventas API de Clientes API de Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Productos_Detalles Inventario_Productos Categorias_Productos Envios_Detalles Paquetes Clientes_Envios
  17. preencoded.png Patrones de integración de datos en microservicios API de

    Productos API de Ventas API de Clientes API de Envios Envios_Detalles Paquetes Clientes_Envios Clientes_Detalles Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Clientes Productos Productos_Detalles Inventario_Productos Categorias_Productos
  18. preencoded.png Comunicación asincrona entre microservicios La comunicación asincrónica entre microservicios

    es un patrón donde los microservicios intercambian mensajes sin esperar una respuesta inmediata, lo que les permite funcionar de manera independiente y desacoplada. En lugar de realizar una llamada directa y esperar un resultado (como en una comunicación sincrónica), un servicio envía un mensaje a otro y continúa con su trabajo, dejando la responsabilidad de procesar el mensaje al destinatario cuando esté listo.
  19. preencoded.png Comunicación asincrona entre microservicios • Desacoplamiento: Los microservicios no

    dependen de la disponibilidad inmediata del otro servicio para seguir funcionando, lo que mejora la resiliencia. • Escalabilidad: Como los servicios no necesitan esperar una respuesta, pueden gestionar más solicitudes simultáneamente. • Tolerancia a fallos: Si un servicio receptor está inactivo o tiene una carga alta, los mensajes se pueden encolar y procesar más tarde. • Desempeño: La asincronía puede mejorar el rendimiento al reducir los tiempos de espera entre solicitudes.
  20. preencoded.png Comunicación entre microservicios a través de eventos 1 Publicación

    Un microservicio publica un evento cuando ocurre una acción relevante. 2 Suscripción Otros microservicios se suscriben a los eventos que les interesan. 3 Procesamiento Los microservicios suscritos procesan los eventos y actualizan sus datos. EJ: Microsevicio de Clientes publica CustomerCreated con sus datos. EJ: Microsevicio de Ventas se suscribe al evento CustomerCreated para poder recibir la información EJ: Microsevicio de Ventas guarda en su propia base de datos esta nueva información recibida.
  21. preencoded.png Comunicación entre microservicios a través de eventos Azure Service

    Bus API de Productos API de Ventas API de Clientes API de Envios
  22. preencoded.png Comunicación entre microservicios a través de eventos Azure Service

    Bus API de Productos API de Ventas API de Clientes API de Envios "Estoy publicando el evento ProductCreated" "Estoy interesado en suscribirme al evento ProductCreated y CustomerCreated" "Estoy publicando el evento CustomerCreated" "Estoy interesado en suscribirme al evento CustomerCreated"
  23. preencoded.png Arquitectura CQRS y su relación con la mensajería asíncrona

    API de Productos Lectura API de Productos Comandos Azure Service Bus Separación de responsabilidades CQRS (Command Query Responsibility Segregation) separa las operaciones de escritura (comandos) de las operaciones de lectura (consultas). Base de datos independientes Los comandos se procesan en una base de datos de escritura optimizada para transacciones, mientras que las consultas se atienden desde una base de datos de lectura. Escalabilidad y rendimiento La arquitectura CQRS permite escalar de forma independiente las operaciones de escritura y lectura, mejorando el rendimiento general del sistema. Web/UI
  24. preencoded.png Desincronización temporal En un sistema distribuido, los cambios realizados

    en un servicio pueden no ser reflejados inmediatamente en otros servicios. Esto significa que, en cualquier momento, diferentes partes del sistema pueden ver diferentes versiones de los datos. Clientes_Detalles (7) Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Clientes (5) Productos
  25. preencoded.png Mitigar la desincronización temporal API de Ventas API de

    Clientes Clientes_Detalles (7) Clientes_Empresas Clientes_Preferencias Ventas_Transacciones Ventas_Productos Ventas_Clientes Clientes (5) Productos
  26. preencoded.png Conclusiones • Desafío en la Implementación: Microservicios es un

    desafío significativo y solo es válido hacerlo cuando hay necesidades claras de escalamiento, resiliencia y tolerancia a fallos. • Evitar Bases de Datos Compartidas: La arquitectura no está bien implementada si se utilizan bases de datos compartidas entre servicios.​ • Conceptos Adicionales Importantes: Los invito a investigar otros conceptos como Consumers, Service Discovery y Cache Distribuido.​​ • Comunicación Asincrónica y Resiliencia: La comunicación asincrónica entre microservicios es crucial para mejorar la resiliencia del sistema, permitiendo que los servicios operen de manera independiente y reduzcan el impacto de fallos en la red.