diciembre 04, 2023

Implementar sistema Publicación Suscripción.

 Consideraciones para Implementar sistema Publicación Suscripción.

Centralizadas 


    El procesamiento de eventos y notificaciones se puede implementar fácilmente en editores y con un intermediario centralizado, ver Figura 1.
En la implementación centralizada, ocurre que: 
  • El enfoque más simple es centralizar la implementación en un solo nodo con un  servidor en ese nodo que actúa como un intermediario de eventos. 
  • Los publicadores publican eventos y (opcionalmente) envían anuncios al corredor, y  los suscriptores envían suscripciones al corredor y reciben notificaciones a cambio. 
  • La interacción con el corredor se realiza a través de una serie de mensajes punto a punto; esto se puede implementar mediante el paso de mensajes o la invocación remota.

Figura 1: Modelo  Publicación-Susbcripción centralizado.


    Este enfoque es sencillo de implementar, pero el diseño carece de resiliencia y escalabilidad, ya que el nodo centralizado representa un punto único de posibles fallas del sistema y es probable que sea un cuello de botella para el rendimiento.

Distribuidas


     En este esquema, el nodo centralizado es reemplazado por una red de corredores que cooperan para ofrecer la funcionalidad deseada. En la visión distribuida, el sistema pub-sub distribuido se implementa como una red de intermediarios o enrutadores en la capa de aplicación que se comunican mediante el uso de las primitivas de capa inferior, normalmente TCP/IP. En la Figura 2 se esquematiza una red pub-sub distribuida donde cada componente de la red de corredores son componentes intermediarios o enrutadores.

    Dicho enfoque tienen el potencial de sobrevivir a las fallas de los nodos y se ha demostrado que pueden funcionar bien en implementaciones a escala de Internet. Como alternativa, es posible tener una implementación completamente nodo-a-nodo (peer-to- peer)  de un sistema de publicación-suscripción. 
    En este enfoque, no hay distinción entre editores, suscriptores y corredores; todos los nodos actúan como intermediarios, implementando de manera cooperativa la funcionalidad de enrutamiento de los eventos requeridos

Figura 2: Publicación-Subscripción distribuido. Tomado de [2]



 Enfoques de Implementación 

Existe una variedad de enfoques de implementación [1] [2]:
  • Inundación (Flooding) el enfoque más simple se basa en Inundación. Opera de la siguiente manera:  
    • Se envía una notificación de evento a todos los nodos de la red y luego se realiza el emparejamiento con el suscriptor del evento. 
    • Como alternativa, la inundación se puede utilizar para enviar suscripciones a todos los posibles publicadores; la coincidencia se realiza en el publicador y los eventos coincidentes se envían directamente a los suscriptores relevantes mediante la comunicación punto a punto. La inundación se puede implementar utilizando una función de difusión o multidifusión subyacente.  
    • Alternativamente, los intermediarios pueden organizarse en un gráfico acíclico en el que cada uno envía notificaciones de eventos entrantes a todos sus vecinos.  
Este enfoque tiene el beneficio de la simplicidad, pero puede resultar en una gran cantidad innecesaria de tráfico de red. 


  • Filtrado : Se conoce como enrutamiento basado en filtrado. Los corredores envían notificaciones a través de la red solo donde hay una ruta a un suscriptor válido. Funciona así: 
    • La propagación de la información de suscripción se realiza a través de la red hacia los editores potenciales y luego se almacena el estado asociado en cada corredor. 
    •  Específicamente, cada nodo debe mantener una lista de vecinos que contenga a todos los vecinos conectados en la red de corredores, una lista de suscripción que contenga todos los suscriptores conectados directamente atendidos por este nodo, y una tabla de enrutamiento. Esta tabla de enrutamiento mantiene una lista de vecinos y suscripciones válidas para ese camino. 
    • Este enfoque exige una implementación de la coincidencia en cada nodo en la red de corredores: en particular, en la función de coincidencia lleva a cabo la notificación de eventos y una lista de nodo junto con la suscripción y las devoluciones asociadas en el conjunto de nodos donde la notificación coincide con la suscripción.  
El algoritmo específico para este enfoque de filtrado se captura en las Figura 3 y opera de la siguiente manera:
  • Cuando un corredor recibe en la solicitud de publicación de un nodo dado, debe pasar esta notificación a todos los nodos conectados donde hay una suscripción con coincidencia al evento y también decide dónde propagar este evento a través de la red de corredores.
  • Las  líneas 2 y 3 logran el primer objetivo al igualar el evento contra la lista de suscripción y luego reenviar el evento a todos los nodos con suscripciones coincidentes (la lista de coincidencias). 
  • Las  líneas 4 y 5 luego usan la función de coincidencia nuevamente, esta vez coincide con el evento contra la tabla de enrutamiento y reenvía solo a las rutas que conducen a una suscripción (la Lista FWD).  
  • Los corredores también deben lidiar con los eventos de suscripción entrantes.  Si el evento de suscripción es de un suscriptor inmediato conectado, entonces esta suscripción se registra en la tabla de suscripciones (líneas 7 y 8).  
  • De  lo contrario, el corredor es un nodo intermediario; Este nodo ahora sabe que existe un camino hacia esta suscripción y, por lo tanto, se agrega una entrada apropiada a la tabla de enrutamiento (línea 9).
  • En ambos casos, este evento de suscripción se pasa a todos los vecinos aparte del nodo de origen (línea 10).
Figura 3: Algoritmo de Filtrado. Tomado de [2]

 

  • Encuentros (Rendezvous) :

Para comprender este enfoque, es necesario ver el conjunto de todos los eventos posibles como un espacio de eventos y dividir la responsabilidad de este espacio de eventos entre el conjunto de agentes de la red. En particular, este enfoque define los nodos de encuentro, que son nodos intermediarios responsables de un subconjunto determinado del espacio de eventos. Para lograr esto, un algoritmo de enrutamiento basado en encuentros debe definir dos funciones: 
    • En primer lugar, SN toma una suscripción determinada, s, y devuelve uno o más nodos de encuentro que asumen la responsabilidad de esa suscripción. Cada uno de estos nodos de encuentro mantiene una lista de suscripción como en el método de filtrado anterior, y reenvía todos los eventos coincidentes al conjunto de nodos de suscripción. 
    • En segundo lugar, cuando se publica un evento e, la función EN(e) también devuelve uno o más nodos de encuentro, esta vez que corresponde a la coincidencia del evento e con las suscripciones en el sistema. 
    • Tenga en cuenta que tanto SN(s) como EN(e) devuelven más de un nodo si la confiabilidad es un problema.  
    • Tenga en cuenta también que este enfoque solo funciona si la intersección de SN(s) y EN(e) no está vacía para una e dada que coincide con s. El código correspondiente para el enrutamiento basado en citas se muestra en la Figura 4. 
Figura 4: Algoritmo de Encuentros. Tomado de [2]

Bibliografia:

[1] Sasu Tarkoma. Publish/Subscribe Systems: Design and Principles. Edited by Joe
Sventek David Hutchison Serge Fdida. 2012. 
[2]  George Coulouris et al. Distributed Systems: Concepts and Design. 5th. USA:
Addison-Wesley Publishing Company, 2011. ISBN: 0132143011 
[3] Roberto Vitillo. Understanding Distributed Systems. 2021

No hay comentarios.:

Publicar un comentario