Ir al contenido principal

Event Driven Architecture & Big ball of mud



EDA

Una arquitectura event-driven (EDA) es un estilo de diseño que se basa en la producción, detección y reacción a eventos. Un evento es un cambio de estado significativo en el sistema o en el entorno que puede ser notificado a otros componentes interesados. Una arquitectura event-driven permite una mayor desacoplamiento, escalabilidad y resiliencia entre los componentes del sistema, así como una mejor adaptabilidad a los cambios y a las necesidades del negocio.


Sin embargo, una arquitectura event-driven también puede tener sus desafíos y riesgos, especialmente si no se aplica una buena gestión de los dominios y los boundaries. Un dominio es un conjunto de conceptos, reglas y procesos relacionados con un aspecto del negocio o del problema que se quiere resolver. Un boundary es una frontera lógica que separa y protege un dominio de otros dominios o de influencias externas. Un buen diseño de dominios y boundaries facilita la comprensión, el mantenimiento y la evolución del sistema, así como la comunicación y la colaboración entre los equipos de desarrollo.

Uno de los problemas más comunes que puede surgir en una arquitectura event-driven es el llamado “Big ball of mud”. Este término se refiere a un sistema que carece de una estructura clara y coherente, que se ha ido construyendo de forma ad hoc y sin seguir ningún principio o patrón de diseño. Un “Big ball of mud” es difícil de entender, de modificar y de extender, y puede provocar errores, inconsistencias y pérdidas de rendimiento.


¿Cómo podemos evitar que nuestra arquitectura event-driven se convierta en un “Big ball of mud”? 

Aquí te presentamos algunas recomendaciones y ejemplos:

  • Define y documenta los dominios y los boundaries de tu sistema, y asegúrate de que los eventos que se producen y se consumen en cada dominio sean relevantes, consistentes y completos. Por ejemplo, si tienes un dominio de facturación, los eventos que se generen y se reciban en ese dominio deberían estar relacionados con la facturación, y no con otros aspectos como el inventario o el envío.
  • Utiliza patrones de diseño que te ayuden a organizar y gestionar los eventos de forma eficiente y segura, como el event sourcing, el CQRS, el saga o el event notification. Por ejemplo, el event sourcing consiste en almacenar el estado de un dominio como una secuencia de eventos, lo que permite reconstruir el estado en cualquier momento, realizar consultas históricas o revertir cambios no deseados.
  • Establece y respeta las reglas y los protocolos de comunicación entre los componentes del sistema, y evita las dependencias innecesarias o las interacciones complejas. Por ejemplo, puedes usar un bus de eventos, un broker o un stream para facilitar la publicación y la suscripción de eventos, y aplicar técnicas como el enrutamiento, el filtrado o la transformación de eventos para optimizar el flujo de información.
  • Implementa mecanismos de control de calidad, de monitorización y de trazabilidad de los eventos, y asegúrate de que los eventos sean identificables, auditable y verificables. Por ejemplo, puedes usar un identificador único, un sello de tiempo y un esquema para cada evento, y emplear herramientas como el logging, el tracing o el testing para detectar y resolver problemas.

Siguiendo estas recomendaciones, podrás aprovechar los beneficios de una arquitectura event-driven sin caer en el “Big ball of mud”. Recuerda que el diseño de una arquitectura event-driven requiere un análisis cuidadoso de los requisitos, las expectativas y los objetivos del sistema, así como una revisión y una mejora continua del mismo.

Entradas populares de este blog

¿Cómo usar Lambda con Amazon SQS para procesar mensajes de forma asíncrona y escalable?

Amazon Simple Queue Service (Amazon SQS) es un servicio de colas de mensajes que permite enviar y recibir mensajes entre componentes de una aplicación de forma fiable y duradera. Con Amazon SQS, se puede desacoplar la lógica de negocio de la fuente de los eventos, y procesarlos de forma asíncrona y en paralelo.   En este artículo, vamos a ver cómo usar Lambda con Amazon SQS para procesar mensajes de una cola de forma eficiente y flexible, aprovechando las características de concurrencia, escalamiento y procesamiento del event source mapping de Lambda, así como la estrategia de backoff que implementa Lambda para manejar errores y reintentos.   Concurrencia del event source mapping Un event source mapping es una configuración que le dice a Lambda qué fuente de eventos debe monitorear y qué función debe invocar cuando se produzca un evento. En el caso de Amazon SQS, el event source mapping se encarga de leer los mensajes de la cola y enviarlos a la función Lambda en lotes. La concurrencia

¿Qué es el patrón Circuit Breaker y cómo se puede implementar con AWS Step Functions?

En el desarrollo de software, es común que las aplicaciones se comuniquen con servicios o recursos externos, como bases de datos, APIs o microservicios. Sin embargo, estos servicios o recursos pueden fallar o estar temporalmente indisponibles por diversas razones, lo que puede afectar el rendimiento y la disponibilidad de la aplicación. Para manejar estos escenarios de falla, se puede utilizar el patrón Circuit Breaker, que consiste en detectar y prevenir que una operación que tiene alta probabilidad de fallar se ejecute repetidamente, causando más problemas o consumiendo recursos innecesarios.  El patrón Circuit Breaker tiene tres estados posibles: cerrado, abierto y medio abierto. Cerrado : En este estado, el circuito está funcionando normalmente y la operación se ejecuta sin problemas. Si se detecta una falla, se incrementa un contador de fallas y se calcula un umbral de fallas, que puede ser un número o un porcentaje de fallas permitidas. Si el contador de fallas supera el umbra

SNS vs EventBridge

La diferencia principal entre ambos servicios radica principalmente en el patrón de arquitectura que intentan cubrir: Message Broker o Event Bus. Message Broker Un message broker es un intermediario que se encarga de traducir y transportar los mensajes entre los servicios que los producen y los que los consumen. El message broker tiene una expectativa sobre cómo el consumidor maneja el mensaje y existe un contrato entre las dos partes. Un ejemplo de aplicación de un message broker es una cola de trabajo, donde los servicios envían tareas a realizar y otros servicios las reciben y las procesan. SNS es un ejemplo de message broker, ya que permite enviar mensajes a diferentes tipos de suscriptores y esperar una confirmación de entrega. Event Bus Un event bus es un canal que se encarga de distribuir los eventos entre los servicios que los generan y los que los escuchan. El event bus no tiene ninguna expectativa sobre cómo el oyente maneja el evento y no existe un contrato entre las dos par