Arquitecturas controladas por eventos

Una arquitectura controlada por eventos es un patrón de diseño de software en el que los microservicios reaccionan a los cambios en el estado, llamados eventos. Los eventos pueden llevar un estado (como el precio de un artículo o una dirección de entrega) o los eventos pueden ser identificadores (una notificación que indica que se recibió o envió un pedido, por ejemplo). Los eventos activan microservicios que trabajan en conjunto para lograr un objetivo común, pero no tienen que conocerse entre sí, excepto el formato de evento. Aunque operan en conjunto, cada microservicio puede aplicar una lógica empresarial diferente y emitir sus propios eventos de salida.

Un evento tiene las siguientes características:

  • Es un registro de algo que sucedió.
  • Captura un hecho inmutable que no se puede cambiar ni borrar.
  • Ocurre si un servicio aplica o no cualquier lógica cuando se lo consume.
  • Puede conservarse de forma indefinida, a gran escala, y consumirse tantas veces como sea necesario.

En un sistema controlado por eventos, los eventos se generan mediante productores de eventos, se transfieren y filtran por un enrutador de eventos (o agente) y, a continuación, se distribuyen a consumidores de eventos (o receptores). Los eventos se reenvían a los suscriptores definidos por uno o más activadores coincidentes. Estos tres componentes (productores de eventos, enrutador de eventos, consumidores de eventos) se separan y se pueden implementar, actualizar y escalar de forma independiente:

Agentes y suscriptores de eventos

El enrutador de eventos vincula los diferentes servicios y es el medio a través del cual se envían y reciben los mensajes. Ejecuta una respuesta al evento original generado por un productor de eventos y envía esta respuesta descendente a los consumidores adecuados. Los eventos se manejan de forma asíncrona y sus resultados se deciden cuando un servicio reacciona a un evento o se ve afectado por él, como en el siguiente diagrama de un flujo de eventos muy simplificado:

Arquitectura controlada por eventos

Cuándo usar arquitecturas controladas por eventos

Ten en cuenta los siguientes usos cuando diseñes tu sistema.

  • Supervisar y recibir alertas para detectar anomalías o cambios en los buckets de almacenamiento, tablas de bases de datos, máquinas virtuales y otros recursos
  • Distribuir a un solo evento para varios consumidores. El enrutador de eventos enviará el evento a todos los consumidores adecuados, sin que tengas que escribir un código personalizado. Cada servicio puede procesar el evento en paralelo, pero de manera diferente.
  • Proporcionar interoperabilidad entre diferentes pilas tecnológicas mientras se mantiene la independencia de cada pila.
  • Coordinar sistemas y equipos que operan y se implementan en diferentes regiones y cuentas. Puedes reorganizar la propiedad de los microservicios. Hay menos dependencias entre equipos y puedes reaccionar más rápido a los cambios que, de lo contrario, se verían afectados por el acceso a los datos.

Beneficios de las arquitecturas controladas por eventos

Estas son algunas de las ventajas cuando se compila una arquitectura controlada por eventos.

Acoplamiento bajo y agilidad mejorada para los desarrolladores

Los productores de eventos están separados de forma lógica de los consumidores de eventos. Esta separación entre la producción y el consumo de eventos significa que los servicios son interoperables, pero se pueden escalar, implementar y actualizar de forma independiente.

El acoplamiento bajo reduce las dependencias y te permite implementar servicios en diferentes lenguajes y frameworks. Puedes agregar o quitar productores y receptores de eventos sin tener que cambiar la lógica en ningún servicio. No necesitas escribir un código personalizado para sondear, filtrar y enrutar eventos.

Eventos asíncronos y resiliencia

En un sistema controlado por eventos, los eventos se generan de forma asíncrona y se pueden emitir a medida que ocurren sin esperar una respuesta. Los componentes vinculados de manera flexible significan que, si un servicio falla, los otros no se verán afectados. Si es necesario, puedes registrar eventos para que el servicio de recepción pueda reanudarse desde el punto de falla o volver a reproducir eventos pasados.

Mensajes basados en envíos, transmisiones de eventos en tiempo real y costos más bajos

Los sistemas controlados por eventos permiten la mensajería basada en envíos y los clientes pueden recibir actualizaciones sin necesidad de sondear de forma continua los servicios remotos para detectar cambios de estado. Estos mensajes enviados se pueden usar para el procesamiento y la transformación de datos sobre la marcha, y el análisis en tiempo real. Además, con menos sondeo, hay una reducción en la E/S de la red y costos reducidos.

Auditoría simplificada y obtención de eventos

La ubicación centralizada del enrutador de eventos simplifica la auditoría y te permite controlar quién puede interactuar con un enrutador, y qué usuarios y recursos tienen acceso a tus datos. También puedes encriptar tus datos en tránsito y en reposo.

Además, puedes usar la obtención de eventos, un patrón de arquitectura que registra todos los cambios realizados en el estado de una aplicación, en la misma secuencia en la que se aplicaron originalmente. La obtención de eventos proporciona un registro de los eventos inmutables que se pueden mantener con fines de auditoría, para recrear estados históricos o como una descripción canónica que explica una decisión basada en un negocio.

Consideraciones de arquitectura

Una arquitectura controlada por eventos puede requerir que te enfoques en el diseño de la aplicación de una manera nueva. Aunque es adecuado para aplicaciones que usan microservicios o componentes separados, también debes considerar lo siguiente:

  • ¿Puede garantizar tu fuente de eventos la entrega si necesitas procesar cada evento?

    Debe ser una fuente de evento duradera y confiable.

  • ¿Puede tu aplicación manejar varias solicitudes asíncronas?

    El rendimiento del sistema no debe depender de un permiso global o de bases de datos inflexibles.

  • ¿Cómo quieres realizar un seguimiento del flujo de eventos?

    Una arquitectura controlada por eventos admite el seguimiento dinámico mediante servicios de supervisión, pero no el seguimiento estático mediante el análisis de código.

  • ¿Quieres usar los datos en la fuente del evento para volver a compilar el estado?

    Debes considerar cómo asegurarte de que se anule la duplicación de tus datos se anulen y soliciten.

¿Qué sigue?