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
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.
Slide 4
Slide 4 text
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.
Slide 5
Slide 5 text
preencoded.png
Slide 6
Slide 6 text
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
Slide 7
Slide 7 text
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
Slide 8
Slide 8 text
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
Slide 9
Slide 9 text
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
Slide 10
Slide 10 text
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.
Slide 11
Slide 11 text
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
Slide 12
Slide 12 text
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
Slide 13
Slide 13 text
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
Slide 14
Slide 14 text
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
Slide 15
Slide 15 text
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
Slide 16
Slide 16 text
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
Slide 17
Slide 17 text
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
Slide 18
Slide 18 text
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
Slide 19
Slide 19 text
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.
Slide 20
Slide 20 text
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.
Slide 21
Slide 21 text
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.
Slide 22
Slide 22 text
preencoded.png
Slide 23
Slide 23 text
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
Slide 24
Slide 24 text
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"
Slide 25
Slide 25 text
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
Slide 26
Slide 26 text
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
Slide 27
Slide 27 text
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
Slide 28
Slide 28 text
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.