Documentos de Académico
Documentos de Profesional
Documentos de Cultura
¿Qué es?
La arquitectura dirigida por eventos o simplemente EDA (por sus siglas en inglés) es una
arquitectura asíncrona y distribuida, pensada para crear aplicaciones altamente escalables.
Como se puede observar en la imagen, todo inicia con la llegada de un nuevo evento al
componente Event Bus, el cual es un componente que se encarga de administrar todos los
eventos de la arquitectura. El Event Bus se encargará de recibir el evento y colocarlo en los
Event Channels, las cuales son básicamente una serie de Colas (Queues) o Temas
(Topics) sobre los cuales habrá ciertos componentes a la escucha de nuevos mensajes.
Por otra parte, los Event Processing son componentes de negocio que están a la escucha
de nuevos eventos depositados en los Event Channels. Los Event Processing son los
encargados de procesar los eventos, es decir, realizar acciones concretas sobre el sistema,
como crear, actualizar o borrar algún registro, finalmente, el proceso puede terminar de
forma silenciosa, o puede generar un nuevo evento para que otro componente lo tome y
continúe con el procesamiento.
Un punto importante a tomar en cuenta es que todos los Event Processing son
componentes distribuidos, lo que quiere decir que están totalmente desacoplados del resto
y que el funcionamiento de uno no afecta al resto. De esta forma, cada Event Processing
administra sus propias transacciones, lo que hace difícil mantener la atomicidad de la
transacción en una serie de eventos, por lo que es un punto importante a tomar en cuenta al
momento de trabajar con esta arquitectura.
• Existe un componente intermediario para administrar los mensajes de forma segura, como
son los Message-Oriented-Middleware (MOM) o Service Bus.
• Completar una operación de negocio requiere por lo general del involucramiento de varios
componentes que realizan una pequeña parte de la tarea global.
• Tanto el productor cómo los consumidores están totalmente desacoplados entre sí,
incluso, no tienen conocimiento de si existe tal consumidor.
Ventajas
3. Performance: Esta es una ventaja cuestionable, ya que al igual que en REST, EDA
necesita pasar por una serie de pasos para completar una tarea, agregando retrasos
en cada paso, desde colocar el evento por parte del productor, esperar a que el
consumidor lo tome, y generar nuevos eventos, sin embargo, la naturaleza
asíncrona de EDA hace que esta desventaja se supere mediante el procesamiento
en paralelo.
Desventajas
3. El emisor no tiene garantía, ni pretende saber, que los destinatarios hayan tratado
los eventos, ya que el patrón usado es Fire&Forget (no hay garantía de que todos
los clientes consuman sus eventos).
Cuando utilizar EDA
EDA es una arquitectura muy robusta que permite crear soluciones altamente escalables,
pero tiene como principal problemática su dificultad para programar, la cual puede ser
mayor a las ventajas que podría ofrecer si se implementa de forma inadecuada, es por ello
que debemos pensar en EDA solo cuando sabes que nuestra aplicación está planeada para
un rápido crecimiento o para un volumen de transacciones muy alto, en otro caso,
podríamos estar haciendo una sobre ingeniería que nos podría salir muy caro.
4. En arquitecturas donde es necesario producir eventos en tiempo real para que otros
suscriptores puedan actuar en consecuencia en tiempo real.
Conclusiones
EDA es sin lugar a duda una de los estilos arquitectónicos más escalables que existe y
permite que empresas puedan atender a millones de solicitudes sin degradar el rendimiento
de sus sistemas, ya que permite dividir el trabajo en diversos procesadores de mensajes
que trabajan de forma totalmente aislados y desacoplados del resto, sin embargo,
implementar este patrón no es fácil, pues requiere un esfuerzo mucho mayor que una
arquitectura síncrona, y requiere una mejor preparación de la solución.
Por último, debemos de entender que en una arquitectura EDA no existe el concepto de
transacciones, pues cada consumidor maneja de forma independiente sus propias
transacciones, por lo que si un paso de la cadena de procesamiento falla, no implicará el
rollback en todos los consumidores, es por ello que debemos de tener manejadores de
errores muy avanzados que permiten a un proceso recuperarse en caso de fallo o de plano
que levante una serie de nuevos eventos para hacer el rollback en los otros consumidores.
De igual manera considerar que en EDA no hay garantía que un evento sea procesado, ya
sea porque no hay consumidores para un determinado evento o por un error en el diseño.
Referencias
https://www.youtube.com/watch?v=iM7aq8tWTmc
https://www.youtube.com/watch?v=gX0DUO171jc
https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/
ch02.html