Una arquitectura basada en eventos es un patrón de diseño de software en el que los microservicios reaccionan a los cambios de estado, denominados eventos. Los eventos pueden incluir un estado (como el precio de un artículo o una dirección de envío) o ser identificadores (por ejemplo, una notificación de que se ha recibido o enviado un pedido). Los eventos activan microservicios que trabajan conjuntamente para alcanzar un objetivo común, pero no tienen que saber nada entre sí, excepto el formato del evento. Aunque funcionan conjuntamente, 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 ha ocurrido.
- Registra un hecho inmutable que no se puede cambiar ni eliminar.
- Se produce independientemente de si un servicio aplica alguna lógica al consumirlo.
- Se puede conservar indefinidamente, a gran escala y consumir tantas veces como sea necesario.
En un sistema basado en eventos, los productores de eventos generan eventos, que un enrutador de eventos (o intermediario) ingiere y filtra, y que luego se distribuyen a los consumidores de eventos (o receptores) correspondientes. Los eventos se reenvían a los consumidores en función de las suscripciones definidas por una o varias inscripciones coincidentes (cuando se usa Eventarc Advanced) o por uno o varios activadores coincidentes (cuando se usa Eventarc Standard). Estos tres componentes (productores de eventos, enrutador de eventos y consumidores de eventos) están desacoplados y se pueden implementar, actualizar y escalar de forma independiente:
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 a los consumidores correspondientes. Los eventos se gestionan 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:
Cuándo usar arquitecturas basadas en eventos
Ten en cuenta los siguientes usos al diseñar tu sistema.
- Para monitorizar y recibir alertas sobre anomalías o cambios en los contenedores de almacenamiento, las tablas de bases de datos, las máquinas virtuales u otros recursos.
- Para enviar un solo evento a varios consumidores. El router de eventos enviará el evento a todos los consumidores adecuados sin que tengas que escribir código personalizado. Cada servicio puede procesar el evento en paralelo, pero de forma diferente.
- Proporcionar interoperabilidad entre diferentes pilas tecnológicas y, al mismo tiempo, mantener 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 obstaculizados por las barreras de acceso a los datos.
Ventajas de las arquitecturas basadas en eventos
Estas son algunas de las ventajas de crear una arquitectura basada en eventos.
Acoplamiento flexible y mayor agilidad de los desarrolladores
Los productores de eventos están separados lógicamente 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, actualizar e implementar de forma independiente entre sí.
El acoplamiento flexible reduce las dependencias y te permite implementar servicios en diferentes lenguajes y frameworks. Puedes añadir o quitar productores y receptores de eventos sin tener que cambiar la lógica de ningún servicio. No es necesario que escriba código personalizado para sondear, filtrar y enrutar eventos.
Eventos asíncronos y resiliencia
En un sistema basado en eventos, los eventos se generan de forma asíncrona y se pueden emitir a medida que se producen sin esperar una respuesta. Los componentes poco acoplados significan que, si falla un servicio, los demás no se verán afectados. Si es necesario, puedes registrar eventos para que el servicio receptor pueda reanudar la actividad desde el punto de fallo o reproducir eventos anteriores.
Mensajería basada en push, flujos de eventos en tiempo real y costes más bajos
Los sistemas basados en eventos permiten enviar mensajes mediante push y los clientes pueden recibir actualizaciones sin necesidad de sondear continuamente los servicios remotos para detectar cambios de estado. Estos mensajes push se pueden usar para procesar y transformar datos sobre la marcha, así como para realizar análisis en tiempo real. Además, al haber menos sondeos, se reduce la E/S de red y los costes.
Auditoría y registro de eventos simplificados
La ubicación centralizada del router de eventos simplifica la auditoría y te permite controlar quién puede interactuar con un router y qué usuarios y recursos tienen acceso a tus datos. También puedes cifrar tus datos tanto en tránsito como en reposo.
Además, puedes usar el registro 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. El registro de eventos proporciona un registro de eventos inmutables que se puede conservar con fines de auditoría, para recrear estados históricos o como una narración canónica para explicar una decisión empresarial.
Consideraciones sobre la arquitectura
Una arquitectura basada en eventos puede requerir que abordes el diseño de tu aplicación de una forma nueva. Aunque es adecuada para aplicaciones que usan microservicios o componentes desacoplados, también debes tener en cuenta lo siguiente:
¿Puede tu fuente de eventos garantizar la entrega si necesitas procesar todos los eventos?
Debe ser una fuente de eventos duradera y fiable.
¿Puede tu aplicación gestionar varias solicitudes asíncronas?
El rendimiento de tu sistema no debe depender de un ámbito global ni de bases de datos inflexibles.
¿Cómo quieres monitorizar el flujo de eventos?
Una arquitectura basada en eventos admite el seguimiento dinámico mediante servicios de monitorización, pero no el seguimiento estático mediante el análisis de código.
¿Quieres usar los datos de tu fuente de eventos para reconstruir el estado?
Debes plantearte cómo asegurarte de que tus datos no estén duplicados y estén ordenados.
Siguientes pasos
- Para saber cómo gestiona los eventos Eventarc Advanced, consulta la información general de Eventarc Advanced.
- Para saber cómo gestiona Eventarc Standard los eventos, consulta la información general de Eventarc Standard.