Introducción a la arquitectura basada en eventos

La computación cada vez más intensiva en procesos, sensible al tiempo y hambrienta de datos necesita un nuevo tipo de arquitectura de aplicaciones, una que pueda proporcionar procesamiento en tiempo real con escalabilidad, resiliencia y uso eficiente de los recursos. La arquitectura basada en eventos brinda estos beneficios al reemplazar el paradigma tradicional de solicitud y respuesta por uno que produce, detecta y reacciona automáticamente a los eventos.

Rachel Kempf - Editor-in-Chief
Introducción a la arquitectura basada en eventos

A medida que nuevas tecnologías como el 5G y edge computing nos llevan progresivamente hacia la Cuarta Revolución Industrial, que se caracteriza por la automatización, la robótica y el machine learning, la necesidad de procesamiento de datos en tiempo real es cada vez más importante. Desde empresas que confían en big data para obtener información sobre sus clientes hasta aplicaciones de IoT que aprovechan el machine learning y la inteligencia artificial, han generado una enorme cantidad de datos y gran parte de ellos deben ser analizados y ejecutados instantáneamente para garantizar su relevancia.

Para adaptarse a la escala y la sofisticación de este proceso de conocimiento intensivo, sensible al tiempo y con un alto consumo de datos, se necesita un nuevo tipo de arquitectura de aplicaciones; un modelo que pueda proveer procesamiento en tiempo real con escalabilidad, resiliencia y un uso eficiente de recursos. La EDA (Event Driven Architecture, arquitectura basada en eventos ) ofrece estos beneficios al reemplazar el paradigma tradicional de solicitud-respuesta con uno que produce, detecta y reacciona a eventos de forma automática. Este artículo presentará una descripción introductoria sobre la arquitectura basada en eventos, sus conceptos clave y características, además de explicar cómo funciona, sus casos de uso y beneficios.

¿Qué es una arquitectura basada en eventos?

DZone define a la arquitectura basada en eventos como “un método de desarrollo de software para la construcción de aplicaciones que se comunican o integran asincrónicamente con otras aplicaciones y sistemas por medio de eventos”. Aunque esta definición ofrece claridad para aquellos familiarizados con la programación, esa frase puede necesitar mayor explicación para los más principiantes.

¿Qué son los eventos?

En una arquitectura basada en eventos, un evento es cualquier incidente que resulta en un cambio de estado en la aplicación. Los eventos se pueden originar por la interacción de un usuario con un sistema (un comando de voz o un clic con el mouse), una fuente externa (un sensor que detecta cambios en la luz o la temperatura) o dentro de un sistema (al cargar un programa). Algunos ejemplos de eventos son:

  • seguridad residencial: movimientos detectados en el área externa;
  • semáforo inteligente: un conductor pasa un semáforo en rojo;
  • comercio electrónico: un usuario cancela una orden de compra o
  • transporte: un ítem llega a su destino.

Aunque algunos eventos pueden no justificar alguna acción, otros pueden activar una o más acciones predeterminadas. Por ejemplo:

  • una cámara inicia una grabación y las luces se encienden;
  • se toma una foto del vehículo y se transmite;
  • se emite un reembolso, se envía un correo electrónico y se actualiza el inventario o
  • el remitente recibe una notificación y la orden es finalizada.

Comunicación sincrónica versus comunicación asincrónica

En la comunicación sincrónica, los procesos deben ocurrir en un orden específico y todas las demás actividades se bloquean hasta que se recibe una respuesta o se agota el tiempo de espera. El proceso sincrónico se puede comparar con la fila en la caja de un supermercado, donde cada cliente debe ser atendido en secuencia con la misma prioridad. Ningún cliente (es decir, el proceso) puede pasar al frente de la fila aunque posea atributos especiales.

Esto no es un problema para las aplicaciones monolíticas heredadas que consisten en procesos estrechamente acoplados que dependen unos de otros. Sin embargo, las aplicaciones modernas están ligeramente acopladas, ya que constan de muchos procesos independientes llamados microservicios que se comunican mediante llamadas a la API. Esto hace que la programación síncrona sea problemática porque, como explica Stack Overflow, “si un servicio tiene recursos bloqueados (por ejemplo, una secuencia de instrucciones está bloqueada o esperando respuesta), las pausas obligadas (timeouts) ahora son exponenciales”. Como resultado, se incrementa la latencia con la complejidad de una aplicación, lo que confunde la capacidad de la aplicación para el procesamiento en tiempo real.

En contraste, la comunicación asincrónica no necesita que esto ocurra en un orden específico, lo que permite que los procesos ocurran de forma simultánea o independiente de los otros. En lugar de un modelo de solicitud-respuesta, la comunicación fluye en una dirección, lo que elimina la necesidad de esperar una respuesta antes de ejecutar el código y, como resultado, reduce la latencia y elimina el riesgo de timeouts. Si volvemos a nuestro ejemplo de la fila en la caja de una tienda, el modelo asincrónico es similar a un cajero que acelera el proceso de pago y reduce la longitud de la fila al priorizar a los clientes que tienen efectivo o tarjetas de crédito a la mano, mientras que pone a los clientes que pagan con cheques en otra fila para que los llenen y posteriormente se autorice el cheque.

¿Cómo funciona una arquitectura basada en eventos?

Los componentes de una arquitectura basada en eventos

Una EDA está compuesta por los productores, canales y consumidores de eventos. Un artículo de InfoQ, publicado en 2020, hace una distinción entre estos tres componentes:

  • Los productores de eventos (event producers) envían datos a los canales cada vez que ocurre un evento.
  • Los canales de eventos (event channels) envían los datos recibidos de los productores de eventos a los consumidores de eventos.
  • Los consumidores de eventos (event consumers) se suscriben a los canales y consumen los datos.

En otras palabras, los productores son responsables por detectar los eventos y enviar datos relevantes a los canales. Estos canales de eventos determinan hacia dónde enviar las notificaciones de que ha ocurrido un evento y estos mensajes son recibidos por uno o más consumidores, que podrían actuar en respuesta a esos eventos o solo notar que han ocurrido.

Características de una arquitectura basada en eventos

El uso de canales de eventos como intermediarios permite que los productores de eventos estén desacoplados de los consumidores de eventos. Así pueden actuar de manera independiente, lo que facilita una mayor escalabilidad y tolerancia a fallos. Además, la organización de aplicaciones basadas en eventos permite que el código se ejecute de forma asincrónica y automática, sin la interacción del usuario.

En otras palabras, la arquitectura basada en eventos es push-based (el envío tiene origen en el servidor; los datos son transmitidos a los usuarios, dispositivos y aplicaciones) y no pull-based (generados por el cliente —esto significa que los consumidores de datos actúan sobre ellos a medida que los reciben, en lugar de cuando se solicitan—). Por ejemplo, en los inicios del correo electrónico se usaba un sistema pull-based, así que los usuarios tenían que conectarse a Internet y hacer clic en un botón para poder revisar su bandeja de entrada. Ahora, las notificaciones son enviadas a los usuarios, para alertarlos cada vez que reciben un nuevo correo electrónico, lo que elimina la necesidad de revisar periódicamente si tienen nuevos correos.

Las características de una arquitectura basada en eventos son:

  • comunicación push-based;
  • componentes desacoplados;
  • escalable y disponible por diseño;
  • flujo de trabajo unidireccional asincrónico, y
  • centrada en eventos, en lugar de bases de datos mutables.

Ejemplos de sistemas EDA

Un ejemplo de una arquitectura basada en eventos es un sistema de detección de fraudes. A medida que la banca en línea y el comercio electrónico se han hecho cada vez más populares, los criminales cibernéticos tienen más oportunidades de realizar fraudes en Internet, al usar estrategias que son más difíciles de detectar que en las transacciones presenciales. En estas situaciones, una acción inmediata es crucial para mitigar los daños financieros y atrapar a los criminales. Con una arquitectura basada en eventos, los patrones de comportamientos fraudulentos pueden ser analizados, detectados y abordados en tiempo real.

Por ejemplo, un sistema de detección de fraudes basado en una EDA puede entrenar algoritmos usando patrones históricos de comportamiento. Cuando un productor de eventos reconoce estos patrones, envía notificaciones a través de los canales de eventos, los cuales podrían desencadenar acciones como detener los pagos y alertar a las partes interesadas, como los titulares de tarjetas, sus compañías de tarjetas de crédito y el comercio electrónico. En caso de un falso positivo, como una actividad irregular durante una transacción de comercio electrónico válida, el titular de la tarjeta puede entonces verificar la transacción como legítima y mejorar el algoritmo de detección de fraudes con la nueva información obtenida.

Además de la detección de fraudes, esta arquitectura es usada frecuentemente para:

  • monitoreos en el sector de la salud;
  • marketing en tiempo real;
  • procesamiento de pagos;
  • transacciones financieras;
  • ciberseguridad, y
  • una amplia variedad de casos de uso de IoT.

Beneficios de una arquitectura basada en eventos

Los numerosos beneficios de una EDA la convierten en una herramienta fundamental para resolver los problemas actuales de Internet. Su tolerancia a fallos no solo es cada vez más importante a medida que más y más servicios de misión crítica migran a la cloud, la explosión de datos generados por los dispositivos de IoT y otros servicios en línea demandan un uso de recursos eficiente para mitigar los costos y el impacto ambiental que genera el procesamiento de datos. Aproximadamente 59 ZB de datos fueron generadon en 2020, de acuerdo con IDG, que estima que “la cantidad de datos generados en los próximos tres años será mayor que la cantidad de datos generada en los últimos 30 años y en todo el mundo se generarán tres veces más datos en los próximos cinco años de lo que se generó en los últimos cinco”.

En este entorno, las aplicaciones no solo necesitan escalar para atender los picos de demanda, sino que también necesitan revertir este proceso para reducir el malgasto de recursos que podría ocurrir si se opera a gran escala de forma consistente. La arquitectura basada en eventos es, afortunadamente, escalable por naturaleza, capaz de tener una flexibilidad granular para crecer o reducirse a nivel de eventos individuales. Además, la recuperación de datos en tiempo real es menos costosa y requiere menos recursos que consultar periódicamente servicios remotos para cambios de estado, lo que reduce el uso de la red y de CPU, lo que resulta en menos handshakes de SSL/TLS.

Otro inconveniente causado por el desarrollo de aplicaciones modernas es que el uso de múltiples servicios crea problemas con el acceso a las bases de datos. Como indica esta publicación de Stack Overflow de 2020, “cuando múltiples servicios comparten una base de datos, podrían crear problemas como dependencias entre equipos sobre cambios de esquema o problemas de desempeño”. Y cuando los desarrolladores tratan de resolver este problema al usar una base de datos separada por servicio, tienen que “lidiar con transacciones distribuidas y la complejidad de mantener múltiples bases de datos”. Sin embargo, con una arquitectura basada en eventos, los registros de eventos pueden proporcionar un almacenamiento de datos centralizado que actúa como una fuente única de datos confiable para las aplicaciones distribuidas, lo que resulta útil para la auditoría central y el cumplimiento de políticas.

Las ventajas de la arquitectura basadas en eventos son:

  • Altamente escalable
  • Tolerante a fallos
  • Costos y uso de recursos eficientes
  • Auditoría central en sistemas distribuidos

Conclusión

En 2017, Gartner señalaba en una nota de prensa la necesidad de migrar hacia una estrategia de negocios centrada en eventos, indicando que “la base de una tecnología de negocio digital debe respaldar la disponibilidad continua, la escalabilidad masiva, la recuperación automática y la extensibilidad dinámica”. Debido a estos beneficios, Gartner ha promocionado a la arquitectura basada en eventos como una herramienta crucial para impulsar la transformación digital de las empresas. Casi cuatro años después, esta arquitectura es más relevante que nunca. No solo ofrece procesamiento en tiempo real para IoT y sitios web con baja latencia, sino que también proporciona escalabilidad bajo demanda, tolerancia a fallos para servicios de misión crítica, una fuente única confiable para aplicaciones distribuidas, así como analítica, monitoreo y registro eficiente de datos a bajo costo y menor uso de recursos.

Edge Functions de Azion ayuda a las empresas a realizar la transición a una EDA de forma simple, al crear funciones basadas en eventos, cada una diseñada para cumplir una tarea específica, lo que reduce la necesidad de reescribir códigos grandes y de base. Al usar nuestra plataforma de edge computing, Edge Functions se ejecuta automáticamente en la edge location más cercana a los usuarios finales para brindar la latencia, el costo y el uso de recursos más bajos posibles. Además, se puede acceder fácilmente a los insights sobre el desempeño de la aplicación en tiempo real a través de Real-Time Metrics, que se integra con las herramientas populares de big data y SIEM para analizar y responder eventos en tiempo real. Para conocer más sobre Edge Functions, visita nuestra sección de productos o crea una cuenta gratuita para comenzar a construir funciones basadas en eventos ahora mismo.

Suscríbete a nuestro boletín informativo