Arquitectura (IT)Arquitecto Backend

Describe el patrón "Bus de Eventos" (Event Bus), dónde aplicarlo y qué trampas ocultas hay que tener en cuenta?

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

El patrón "Bus de Eventos" (Event Bus) es un enfoque arquitectónico que permite implementar la comunicación entre los componentes del sistema mediante la publicación y la escucha de eventos. En este caso, los componentes no conocen directamente entre sí, se produce una interacción débilmente acoplada según el principio de "publicador-suscriptor".

Uso: Este patrón es útil donde se necesita garantizar una interacción escalable y extensible entre múltiples módulos, por ejemplo, en aplicaciones web complejas, sistemas de escritorio, plataformas de microservicios.

Ejemplo de código en Python utilizando la biblioteca pyee:

from pyee import EventEmitter bus = EventEmitter() def on_user_created(user): print(f"Usuario creado: {user}") bus.on('user_created', on_user_created) bus.emit('user_created', {"id": 1, "nombre": "Iván"})

Características clave:

  • Aumenta la modularidad, ya que los servicios se comunican a través del bus, y no directamente.
  • Facilita la adición de nuevos manejadores de eventos sin modificar el código existente.
  • Puede llevar a errores difíciles de rastrear debido a dependencias implícitas y complicaciones en el seguimiento de flujos de negocio.

Preguntas capciosas.

¿Todos los eventos en Event Bus deben ser persistentes?

No, no necesariamente. En la mayoría de los casos, el Event Bus opera con eventos efímeros que no se guardan. La persistencia solo es necesaria si es importante evitar la pérdida de eventos (por ejemplo, a través de Kafka).

¿Se perderá un evento si no hay suscriptores registrados en el momento de la publicación?

Sí, si el sistema no guarda eventos (efímeros), el evento se perderá. Para la entrega garantizada se necesita un Event Bus duradero (por ejemplo, RabbitMQ con colas persistentes).

¿Se puede utilizar un solo Event Bus para código sincrónico y asincrónico sin restricciones?

No, un Event Bus sincrónico puede bloquear el hilo hasta que todos los manejadores se completen, lo cual es inaceptable para alta carga. Para sistemas escalables se utilizan Event Bus asíncronos o se externaliza el procesamiento de eventos en procesos/hilos separados (por ejemplo, a través de Celery).