Arquitecturas orientadas a eventos: conceptos y desafíos principales
Clase 15 de 24 • Curso de Fundamentos de Arquitectura de Software
Resumen
Las arquitecturas orientadas a eventos representan opciones relevantes en la actualidad tecnológica, permitiendo modelar sistemas complicados o complejos mediante transmisión de mensajes o eventos. Para aprovechar su potencial se requiere un adecuado entendimiento, coordinación y comunicación clara dentro del equipo de arquitectos y desarrolladores.
¿Qué es una arquitectura orientada a eventos?
Este tipo de arquitectura se sustenta en transmitir mensajes o eventos generados al ocurrir cambios significativos en el sistema. Fundamentalmente, consiste en dos tipos de componentes:
- Productores: generan eventos como consecuencia de acciones o comandos.
- Consumidores: reciben notificaciones sobre los eventos generados por los productores.
Estos mensajes normalmente se gestionan mediante buses o buffers intermedios, garantizando una distribución efectiva a múltiples consumidores.
¿Cómo funciona el diseño basado en dominios o DDD?
Una técnica común para orientar este tipo de arquitectura es el Diseño Basado en Dominios (Domain Driven Design, DDD). El DDD facilita la creación de lenguajes compartidos para favorecer la comunicación entre diferentes partes del sistema:
- Identifica claramente qué dominios producen eventos.
- Facilita el reconocimiento de dominios que consumen estos eventos para reaccionar adecuadamente.
- Definir con claridad la línea temporal y relación entre estos dominios.
Es importante notar que esta metodología implica una comunicación fluida y consistente que garantiza la comprensión del contexto donde se emplea cada concepto.
¿Cuáles son los retos asociados a la arquitectura orientada a eventos?
Este paradigma ofrece múltiples beneficios y, a la vez, presenta ciertos desafíos como:
Líneas de tiempo distintas dentro del mismo sistema
Puede surgir complejidad cuando múltiples consumidores, trabajando en diferentes líneas temporales, reciben simultáneamente el mismo evento. Por ejemplo:
- Un productor emite el evento "factura emitida".
- Consumidores diversos (entidades públicas, sistemas de notificación por correo) procesan el evento, pero en diferentes tiempos y velocidades.
- Se generan notificaciones en órdenes no sincronizadas, lo cual puede reducir niveles de servicio.
Colisiones y complejidad en estructuras de dominio
Al modelar dominios complejos, pueden aparecer conceptos comunes usados de forma diferente según el contexto:
- Conceptos como producto o cliente pueden existir en diversos contextos (ventas, soporte) generando eventos distintos.
- Esto genera la necesidad de un lenguaje ubicuo que evite confusiones entre miembros del equipo.
Gestión de transaccionalidad y coordinación
La transaccionalidad distribuida es otro desafío implícito, especialmente en sistemas que involucran múltiples componentes:
- Las transacciones distribuidas involucran varios componentes, posiblemente fuera del sistema principal.
- Requiere una coordinación cuidadosa para garantizar consistencia y atomicidad en operaciones distribuidas.
Estos retos demandan un diseño cuidadoso y profundo conocimiento del problema para mantener la eficacia y rendimiento de la arquitectura orientada a eventos.
¿Consideras que la arquitectura orientada a eventos es adecuada para tus próximos proyectos? Comparte tus experiencias en comentarios.