Como todo gestor de datos sabe, la gran cantidad de datos disponibles no siempre es necesaria para las necesidades del negocio. Es por eso que la arquitectura basada en eventos (EDA, por sus siglas en inglés) resulta útil para filtrar los datos que cumplen ciertos criterios, reduciendo la carga en los sistemas de integración. La EDA permite que diferentes sistemas trabajen con distintos datos mediante un acoplamiento débil entre los microservicios.
La EDA crea flexibilidad para los desarrolladores gracias al bajo acoplamiento y a la capacidad de emitir eventos. Esto se debe a que los cambios en un sistema pueden realizarse dentro de la red de aplicaciones sin afectar a los sistemas posteriores. Un nuevo sistema puede procesar un evento y pasarlo a los sistemas más antiguos de la misma manera que lo hacía antes de cualquier cambio en el sistema, permitiendo así métodos de comunicación como la difusión.
La EDA se compone principalmente de microservicios e integraciones en tiempo real. Un evento determinado activa e interactúa con diferentes microservicios o sistemas finales. En EDA, se siguen todas las propiedades ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad). Convenientemente, las propiedades ACID también son seguidas por la arquitectura monolítica para la gestión de transacciones.
A continuación, presentamos tres beneficios de la arquitectura basada en eventos:
#1. Bajo acoplamiento
La arquitectura monolítica está fuertemente acoplada y no es capaz de escalar ni de ofrecer granularidad. Si hay algún problema o error en la arquitectura monolítica, toda la aplicación fallará y el tiempo de resolución será elevado. La aparición de los microservicios soluciona las deficiencias de la arquitectura monolítica, ya que los microservicios permiten el bajo acoplamiento, la escalabilidad y la granularidad.
Dado que la arquitectura basada en eventos y los microservicios van de la mano, podemos derivar los beneficios de utilizar una arquitectura de microservicios mediante un enfoque de conectividad basado en API. Como los microservicios están aislados entre sí, cualquier modificación o mejora puede escalarse fácilmente y podemos agregar nuevas funcionalidades para formar una malla o red de aplicaciones.
El bajo acoplamiento tiene tres ventajas únicas: escalabilidad, consistencia y tolerancia a fallos.
- Escalabilidad: Si hay una carga de datos elevada o un gran volumen de tráfico, podemos escalar fácilmente nuestros servicios con un bajo acoplamiento. También podemos actualizar nuestras aplicaciones para agregar o ajustar funcionalidades.
- Consistencia: La EDA tiene microservicios que operan de forma aislada, pero se espera que los datos entre todos los sistemas sean consistentes. Lograr esto con la arquitectura monolítica tradicional es complicado, pero es mucho más manejable con EDA. En EDA, el único punto de contacto es el corredor de mensajes. Todos los mensajes se almacenan en la cola, lo que permite la consistencia entre los sistemas finales. Los diferentes microservicios responden a un evento a través de un corredor de mensajes. Como el corredor de mensajes es el centro de la EDA, asegura que todos los eventos entre los sistemas sean consistentes y que la información se comunique de manera adecuada.
- Tolerancia a fallos: Los mensajes residen en las colas, lo que permite a los servicios consumidores recuperar estos mensajes desde una única fuente. Si hay tiempo de inactividad, los mensajes se almacenan en la cola y se procesarán una vez que el servicio consumidor vuelva a estar activo, garantizando que no haya pérdida de datos.
#2. Resiliencia
La arquitectura basada en eventos favorece una mayor resiliencia porque reduce las dependencias entre las aplicaciones. Si un servicio específico falla, puede reiniciarse de manera autónoma, recuperar eventos y reproducirlos si es necesario. Por ejemplo, si una aplicación experimenta mucho tráfico, podemos almacenar las solicitudes excedentes en la cola para que no se pierdan datos.
En un entorno clúster, si un evento no es reconocido por una aplicación debido a la indisponibilidad o caída del sistema, estará disponible para que otros servidores lo procesen, evitando que el evento se pierda.
#3. Difusión
La difusión es el núcleo de la arquitectura basada en eventos y es el proceso mediante el cual los mensajes pueden publicarse en múltiples sistemas finales al mismo tiempo, permitiendo que la aplicación se mantenga sincronizada.
La difusión es consistente entre varios sistemas y permite que el evento difundido funcione como una única fuente de verdad. Y, aunque todas las aplicaciones en la EDA están aisladas entre sí, logran mantener la consistencia. La difusión ayuda en el procesamiento de datos en tiempo real, agilizando los procesos de toma de decisiones para las empresas y proporcionando mensajes a los sistemas finales sin necesidad de sondeo.