Patrón Publisher-Subscriber

Patrón Publisher-Subscriber (Pub/Sub)

Es una variación del patrón Observer que se enfoca en una comunicación más desacoplada y escalable. En este patrón, los componentes de un sistema se dividen en dos roles principales:

  • Publicadores: Son los componentes que generan eventos o mensajes. Cuando ocurre un evento, el publicador lo emite sin conocer quién está interesado en recibir esa información.
  • Suscriptores: Son los componentes que están interesados en ciertos tipos de eventos. Se suscriben a temas o canales específicos y reciben los mensajes publicados en esos temas.

¿Cómo funciona?

  1. Suscripción: Los suscriptores se suscriben a temas o canales de interés.
  2. Publicación: Cuando ocurre un evento, el publicador publica un mensaje en un tema específico.
  3. Distribución: Un intermediario (broker de mensajes) se encarga de distribuir el mensaje a todos los suscriptores interesados en ese tema.

Diagrama simplificado:



Ventajas del patrón Pub/Sub:

  • Desacople extremo: Los publicadores y suscriptores no se conocen entre sí, lo que facilita la escalabilidad y la flexibilidad.
  • Escalabilidad: El sistema puede escalar horizontalmente agregando más publicadores o suscriptores sin afectar a otros componentes.
  • Asincronía: Los mensajes se pueden procesar de forma asíncrona, lo que mejora el rendimiento y la capacidad de respuesta.
  • Resiliencia: Los fallos en un componente no afectan a todo el sistema.

Usos comunes del patrón Pub/Sub:

  • Sistemas de mensajería: Para enviar mensajes entre diferentes aplicaciones.
  • Microservicios: Para la comunicación entre servicios independientes.
  • Sistemas de eventos: Para la detección y respuesta a eventos en tiempo real.
  • Sistemas de streaming de datos: Para la distribución de datos en tiempo real.

Comparación con el patrón Observer:

CaracterísticaObserverPublisher-Subscriber
AcoplamientoMenos desacopladoMás desacoplado
EscalabilidadLimitadaAlta
AsincroníaPuede ser síncrono o asíncronoPrincipalmente asíncrono
IntermediarioNo es necesarioGeneralmente se utiliza un broker de mensajes

Ejemplo práctico:

Imagina una aplicación de comercio electrónico. Cuando un usuario realiza una compra, se publica un evento "OrdenCompletada" en un tema. Los suscriptores a este tema pueden ser:

  • Un servicio de envío para procesar el pedido.
  • Un sistema de facturación para generar una factura.
  • Un sistema de análisis para recopilar datos sobre las compras.

Implementación:

Existen muchas tecnologías y herramientas para implementar el patrón Pub/Sub, como:

  • RabbitMQ: Un broker de mensajes de código abierto muy popular.
  • Apache Kafka: Diseñado para el procesamiento de grandes volúmenes de datos en tiempo real.
  • AWS SNS: Un servicio de notificaciones en la nube de Amazon.
  • Google Pub/Sub: Un servicio de mensajería en la nube de Google.

En resumen, el patrón Publisher-Subscriber es una herramienta poderosa para construir sistemas distribuidos, escalables y resilientes. Es ideal para escenarios donde la comunicación entre componentes debe ser desacoplada y asíncrona.


Comentarios

Entradas más populares de este blog

Layers of Abstraction Architectural Pattern

Antipatrones de diseño de software

Asynchronous Message Communication Pattern