100% encontró este documento útil (2 votos)
1K vistas11 páginas

Comunicación Indirecta en Sistemas Distribuidos.

Este documento describe los conceptos de comunicación indirecta y sistemas distribuidos basados en eventos. La comunicación indirecta involucra un intermediario entre el emisor y el receptor, lo que permite el desacoplamiento en tiempo y espacio. Los sistemas distribuidos basados en eventos utilizan un modelo de publicador/suscriptor donde los publicadores publican eventos a través de un servicio de eventos o broker, el cual distribuye los eventos a los suscriptores interesados. Existen diferentes tipos de suscripciones como canales, temas y contenido.

Cargado por

Sergio Gonzalez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (2 votos)
1K vistas11 páginas

Comunicación Indirecta en Sistemas Distribuidos.

Este documento describe los conceptos de comunicación indirecta y sistemas distribuidos basados en eventos. La comunicación indirecta involucra un intermediario entre el emisor y el receptor, lo que permite el desacoplamiento en tiempo y espacio. Los sistemas distribuidos basados en eventos utilizan un modelo de publicador/suscriptor donde los publicadores publican eventos a través de un servicio de eventos o broker, el cual distribuye los eventos a los suscriptores interesados. Existen diferentes tipos de suscripciones como canales, temas y contenido.

Cargado por

Sergio Gonzalez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SISTEMAS DISTRIBUIDOS

TEMA 4: Comunicación Indirecta


1. Comunicación indirecta vs. punto a punto

 Comunicación punto-a-punto (directa). En una comunicación directa los participantes


necesitan estar funcionando simultáneamente. Otra consecuencia de la comunicación
directa es que el emisor necesita conocer la dirección del receptor (no tiene por qué ser la
dirección IP del otro extremo, puede ser cualquier referencia como proxy, URL o puntero).

Por estas características, la comunicación directa no es buena forma de comunicación


cuando existen varios participantes.

 Comunicación indirecta. La comunicación indirecta es otra forma de comunicación en la que


entre el emisor y el receptor existe un intermediario. De esta forma, emisores/receptores
están desacoplados en tiempo y espacio.

o Desacoplamiento en espacio significa que los emisores no necesitan conocer la


identidad de los receptores y viceversa. Solo necesitan conocer la referencia del
intermediario. Así, los emisores/receptores pueden ser reemplazados, migrados o
replicados sin problema.
o Desacoplamiento en tiempo. Emisores y receptores no tiene que ejecutarse
simultáneamente, ya que el intermediario puede almacenar el mensaje
temporalmente.

Dependiendo del tipo de comunicación indirecta, se utilizan unos nombres u otros. Por
eso, ss importante tener en cuenta que cuando hablamos de emisor nos referimos a
publicador o generador, mientras que receptor es sinónimo de subscritor.

¿Cuándos es adecuado utilizar comunicación indirecta?

-Adecuado para escenarios donde usuarios conectan y desconectan muy a menudo. Por
ejemplo, entornos móviles en los cuales las notificaciones son asíncronas (aparecen sin
que el usuario haga nada) y servicios de mensajería.

-Adecuado para escenario con un gran número de usuarios que van a acceder a un
conjunto limitado de contenido. Por ejemplo, a Spotify no le interesa tener una conexión
uno a uno con cada uno de sus usuarios.

-Diseminación de eventos donde los receptores son desconocidos y cambian a menudo.


Por ejemplo, la tecnología RSS.

2. Desventajas de la comunicación indirecta


-Sobrecarga de rendimiento debido a la introducción de un nivel de indirección. El intermediario
tiene que recibir todo el tráfico de los emisores y encargarse de transmitirlo a todos los

1
receptores. Puede considerarse por tanto como un cuello de botella, que, si falla, falla todo el
sistema. En los sistemas distribuidos se intenta evitar los puntos únicos de fallo.

-Mayor dificultad de gestión debido al desacoplamiento entre emisores / receptores.

-Dificultad para alcanzar propiedades end-to-end como tiempo real y seguridad.

3. Modelos de comunicación indirecta


Hasta ahora habíamos entendido el intermediario de la comunicación directa como un programa
en ejecución que recibe una serie de mensajes por un socket y los envía por otros sockets. Sin
embargo, el concepto de intermediario es algo más abstracto y depende del modelo de
comunicación indirecta que se utilice.

 Grupos de comunicación (Group communication). En este tipo comunicación indirecta, el


emisor envía un mensaje a un grupo de usuarios que es entregado sin conocer la identidad
del grupo de usuarios.
La principal característica de este modelo de comunicación es que el emisor envía los
mensajes a un grupo multicast, pero no existe un intermediario como tal.

 Sistemas basados en eventos (Event-based system). Este tipo de comunicación indirecta


está basado en un sistema de publicación de eventos, a través de un intermediario (llamado
bróker de eventos), al que está subscritos determinados procesos.

 Colas de mensajes (Message queues). En los sistemas basados en colas de mensajes el


intermediario es una cola. En alguna parte de la red, existe una cola en la que los emisores
mandan mensajes y los receptores reciben los mensajes de esta cola.

 Sistemas de memoria compartida distribuida (Distributed shared memory). Los sistemas


de memoria compartida distribuida tratan de simular una interfaz de memoria compartida.
En este caso, se considera la memoria compartida como el intermediario de la
comunicación.

4. Sistemas distribuidos basados en eventos


Un sistema distribuido basado en eventos o sistema distribuido publicador/suscriptor es un
modelo de comunicación indirecta en el cual unos procesos llamados publicadores publican
eventos en un sistema de eventos o bróker, el cuál se encarga de enviar copias de esos eventos
a cada uno de los suscriptores que están suscriptos a esos eventos. Por tanto, los suscriptores
deciden qué información le interesa y esperan a recibir dicha información por parte del bróker.

 Características del modelo publicador/suscriptor. El modelo de sistemas


distribuidos basado en eventos tiene dos características principales:

-Heterogeneidad.

-Asíncrono.

2
 Roles
-Publicador. Publica contenido en un servicio de eventos.

-Suscriptor. Que un determinado proceso se subscriba a un determinado evento


significa que está interesado en ese evento y, por tanto, va a ser informado cada vez que
un publicador publique eventos.

-Servicios de eventos o bróker. Recibe eventos de los publicadores y los


distribuye a los subscritores en función de sus intereses.

 Ejemplos de sistemas de notificación de eventos.


Los sistemas basados en eventos se utilizan en una gran variedad de dominios de aplicación,
aunque mayoritariamente en aquellos relacionados con la diseminación de eventos a gran
escala. Algunos ejemplos son:

-Mercado de valores financieros.

-Otras áreas basadas en datos en tiempo real como los archivos RSS o feedss
RSS

-GUIs. Los propios widgets dentro de una interfaz gráfica también pueden
comunicarse mediante un sistema de notificación de eventos.

-Aplicaciones de monitoreo como aplicaciones para consultar el tiempo o los


niveles de contaminación

Para entender mejor el concepto de sistemas distribuidos basados en eventos, vamos a mostrar
un ejemplo que se refiere a una red de venta de computadores. En realidad, podría ser una red
de ventas de cualquier elemento, ya que cuando se necesita tener un control muy fino de un
stock, se suele utilizar comunicación indirecta.

3
4.1 Modelo de programación
El modelo de programación en los sistemas de publicador-suscriptor están basados en un
pequeño conjunto de operaciones mostradas en la siguiente imagen:

-Los publicadores propagan un evento e a través de la operación publish(e) y los subscritores


expresan su interés en una serie de eventos mediante la suscripción. Para ello, utilizan la
operación subscribe(f) donde f se refiere a un filtro (un patrón definido sobre un el conjunto de
todos los posibles eventos).

-Es importante tener en cuenta que el filtrado de eventos se realiza en el bróker, lo que
supone una mejora en eficiencia para el subscritor, pues solo va a recibir eventos en los
cuales está interesado.

-Los filtros son expresiones con un formato (expresiones regulares) o lenguaje (SQL)
determinado.

-Cuando un subscriptor ya no esté interesado en un determinado tipo de eventos, puede


cancelar su subscripción haciendo uso de la operación subscribe(f).

-Por otro lado, el bróker de eventos utiliza la operación notify(e) para entregar un evento a un
subscritor.

-Además, algunos sistemas completan este conjunto de operaciones introduciendo el concepto


de anuncios. Con los anuncios, los publicadores tienen la posibilidad de declarar la naturaleza
de los eventos a través de la operación advertise(f). En otras palabras, los subscritores
manifiestan sus intereses en función de a qué eventos estén suscriptos, y los publicadores
opcionalmente, declaran el tipo de un evento mediante los anuncios.

 Tipos de subscripciones.
En función de cómo se realice el filtrado de eventos, se pueden distinguir cuatro tipos de
sistemas de propagación de eventos.

-Basados en canal. En este enfoque, cada bróker de eventos dispone de una


serie de canales, de tal forma que los publicadores indican en que canal quieren publicar

4
un evento y los subscriptores se subscriben a algunos de esos canales para recibir todos
los eventos que se publiquen en ese canal.

Un ejemplo en es el servicio de eventos de CORBA.

-Basados en topic. En este enfoque, las subscripciones se hacen en función de


una serie de campos denominados topic (tema). Son similares a los basados en canales,
con la diferencia de que, en los basados en canales, los topics están definidos
implícitamente en el canal y en el caso de los basados en topic, el tema se declara
explícitamente.

-Basados en contenido. Es una generalización de los basados en topic ya que


permiten al subscriptor definir una expresión de filtrado. Más concretamente, un filtro
basado en contenido es una consulta definida sobre los valores de los atributos del
evento.

Esto implica que el subscritor tiene que conocer qué estructura tienen los eventos. Por
ejemplo, para un evento con una estructura con los siguientes campos:

struct Event{
string name;
Color color;
}
Una suscripción puede ser algo como: [Link] (color=”rojo”)

-Basados en tipo. Este enfoque está relacionado con el paradigma de


programación orientado a objetos, donde cada objeto define un tipo específico. Así
pues, las suscripciones se definen en términos del tipo de evento.

[Link] (type=A)

 Formas de implementar los brokers.


El objetivo de un sistema de publicación-subscripción es garantizar que los eventos se entregan
de manera eficiente a todos los subscriptores que tienen filtros definidos que coinciden con los
del evento. Además de esto, se pueden considerar requisitos de seguridad, escalabilidad,
tolerancia a fallos, concurrencia y calidad del servicio. Esto hace que la implementación de
sistemas de publicación-suscripción sea bastante compleja, y, por tanto, es bastante importante
elegir la arquitectura general del sistema para implementar publicación-subscripción.

-Implementación centralizada. Consiste en centralizar la implementación del


bróker en único nodo. Los publicadores publican eventos y los suscritores envían
subscripciones a este nodo.

Ventajas: Sencillo de implementar.

Inconvenientes: Presenta problemas de escalabilidad. Se necesitan canales de


comunicación con mucho ancho de banda porque todos los eventos irán a la
misma máquina.

5
-Implementación distribuida. Una red de bróker que cooperan en la
distribución de eventos. Es decir, tenemos nodos diferentes en la misma o
diferentes redes que soportan cada uno parte del trabajo.
Normalmente están basados en canales o topics, y lo que se haces es que cada
canal esté en un bróker. Si un bróker falla, su canal se podría mover a otro
bróker. Basado en contenido y basado en tipo es muy difícil de implementar con
esta arquitectura.

 Sistemas basados en contenido


El enrutamiento basado en contenido es la capacidad de enrutar un mensaje en función de uno
o más valores contenidos dentro del mensaje. El servicio de enrutamiento inspecciona cada
mensaje y lo enruta al extremo de destino en función del contenido del mensaje

Existen diversas formas de implementar este enrutado:

-Inundación (Flooding)

-Filtrado

-Anuncios. El publicador indica el tipo de los eventos que genera.

-Rendezvous.

5. IceStorm
Como ejemplo de sistema de propagación de eventos vamos a ver IceStorm, un servicio de Ice
que tiene las siguientes características:

-Orientado a invocaciones (no a datos). A diferencia de otros servicios similares en otros


middlewares, IceStorm propaga invocaciones a métodos en lugar de objetos o estructuras
de datos.

-Basado en topic. Los publicadores pueden publicar en varios topics y los suscriptores
pueden estar subscriptor a un topic o a varios.

6
-Federable. Los topics se pueden enlazar.

-Bróker centralizado. IceStorm es un servicio de eventos centralizados, pero dispone de una


réplica primaria llamada HA-IceStorm.

-Utiliza únicamente semántica push. En este sentido, publicar significa invocar métodos sin
valores de retorno.

-Desacopla producción y consumo.

-Permite usar cualquier protocolo de transporte en cualquier productor o consumidor.

-Tiene características de filtrado muy simples. Proporciona un mecanismo básico de filtrado


basado en pesos.

6. Sistemas de colas de mensajes


Las colas de mensajes distribuidos forman una importante categoría dentro de los sistemas de
comunicación indirecta. Mientras que los grupos de comunicación y los sistemas basados en
eventos proporcionan un servicio de comunicación uno a muchos, las colas de mensajes
proporcionan un servicio punto a punto que utiliza el concepto de una cola de mensajes para
lograr las propiedades de desacoplamiento en tiempo y espacio:

1. Un emisor pone un mensaje en una cola de mensajes determinada.

2. Un (único) receptor consume elimina el mensaje de la cola.

En los sistemas de colas de mensajes, las colas son normalmente una estructura FIFO (First In
First Out), aunque algunas implementaciones proporcionan prioridad o criterios de selección.

7
En este tipo de comunicación indirecta, los mensajes están formados por un identificador de
cola, metadatos y payload.

 Ejemplos de middleware

1. WebSphere MQ, Oracle AQ


2. JMS (Java Message Service)

 Características
-Validez. Todo mensaje enviado es finalmente recibido. Los sistemas de colas de mensajes
garantizan que los mensajes serán entregados, pero no pueden decir nada sobre el momento
de la entrega.

-Integridad. El mensaje recibido es idéntico al enviado y no se entregan mensajes duplicados.

-Persistencia. Las colas de mensajes almacenan los mensajes de forma indefinida (hasta que son
consumidos).

 Modelo de programación
El modelo de programación ofrecido por las colas de mensajes para sistemas distribuidos
soporta tres formas de recibir mensajes:

-blocking receive (pull) El receptor se bloquea hasta que este disponible un


determinado mensaje.

- non-blocking receive (polling). Recepción sin bloqueo. Se comprueba el estado de la


cola y se obtiene un mensaje si el evento está disponible.

- notify (push). Operación de notificación que emitirá una notificación de evento cuando
un mensaje este disponible en una cola determinada.

6.1Rabbit MQ

8
RabbitMQ gestor de colas de mensajes que puede utilizarse como middleware para cubrir las
necesidades de mensajería de una aplicación. Para ello, RabbitMQ implementa un protocolo
estándar llamado AMPQ (Adavanced Message Queuing Protocol). AMQP es un protocolo de la
capa de aplicación que estipula el comportamiento tanto del servidor que provee los mensajes
como del cliente de la mensajería.

La siguiente imagen muestra las entidades usadas en el modelo AMQP para la transferencia de
un mensaje

 Conceptos
-Publicadores. Envían mensajes a los exchanges.

-Exchanges. son entidades AMQP desde donde se enrutan los mensajes hacia
las colas.

-Consumidores. Declaran las colas y la vincula a un exchange para recibir los


mensajes.

-Colas. son las entidades sobre las que el broker almacena los mensajes que
recibe de los productores, desde donde los consumidores obtienen dichos
mensajes.

-Routing. Se pueden utilizar reglas de enrutamiento para decidir a qué colas se


entregará un mensaje. Cada cola tiene asociada un routing key,y cuando se
envía un mensaje al bróker, el bróker enviará el mensaje a la cola dependiente de su
routing key.

 Hola Mundo

9
Vamos a mostrar dos pequeños programas escritor en Python: un productor que envía un único
mensaje y un consumidor que recibe este mensaje y lo imprime. En el siguiente diagrama, “P”
es nuestro productor, y C” es el consumidor. La caja del medio es una cola -un buffer de
mensajes que mantiene RabbitMQ-.

10
 Enlace flexible.

6.2 Celery
Celery es un conjunto de herramientas que nos permite trabajar fácilmente con múltiples
servicios viéndolos como tareas. No puede decirse que sea un sistema de comunicaciones,
ya que el sistema de comunicaciones es RabbitMQ

11

Common questions

Con tecnología de IA

The AMQP protocol in RabbitMQ facilitates message routing through exchanges, where messages are received and routed to appropriate queues based on routing keys. Publishers send messages to exchanges, which apply rules or routing keys to decide which queues to deliver messages to, ensuring efficient and adaptable routing .

An event broker in a publish/subscribe system acts as an intermediary that receives events from publishers and distributes them to subscribers based on their interests. This mechanism improves message delivery efficiency by performing event filtering, which means that subscribers receive only the events they are interested in. The broker uses filtering mechanisms such as regular expressions or SQL-like queries to match events with subscribers' interests, reducing unnecessary data transmission .

The 'notify' operation in the publish/subscribe model refers to the broker delivering an event to subscribers, whereas the 'publish' operation is used by publishers to send events to the broker. 'Notify' is crucial as it triggers the asynchronous communication from the broker to the subscribers, based on their subscriptions, thus facilitating real-time information dissemination. In contrast, 'publish' deals with event generation, emphasizing the decoupled nature of event producers and consumers .

The event broker in a publisher-subscriber system is responsible for receiving events from publishers and distributing them to subscribers based on their subscription criteria. It performs event filtering and ensures that subscribers receive only the events they have expressed interest in .

Event brokers can be implemented using centralized or distributed strategies. Centralization simplifies implementation but can lead to scalability issues and require high bandwidth. Distributed implementations share the workload across multiple nodes, enhancing scalability and fault tolerance, though they may complicate routing and filtering, especially in content-based systems .

Subscriptions can be channel-based, topic-based, content-based, or type-based. Channel-based subscriptions rely on set communication paths, topic-based use predefined subjects, content-based allow dynamic queries on event fields, and type-based use object types, affecting how events are filtered and matched with subscriber interests .

A distributed event-based publish/subscribe system is characterized by heterogeneity and asynchronicity. Key roles include the publisher, which produces and publishes events; the subscriber, which registers interest in specific events and receives notifications; and the broker, which facilitates event distribution to relevant subscribers according to their registered interests .

The publisher-subscriber model allows different systems and processes to interact regardless of their underlying technologies (heterogeneity). It supports asynchronous operation since publishers can send events independently of the subscribers' readiness to receive them. Subscribers receive notifications based on their interests via an event broker, supporting asynchronicity .

In AMQP and RabbitMQ, routing keys are critical for determining how messages are dispatched from exchanges to queues. Each queue is associated with specific routing keys, and when a message is published to an exchange, the routing key is evaluated to determine which queues will receive the message. This system enables precise control over message flow and supports complex routing scenarios while optimizing message distribution across the system .

Indirect communication is advantageous in environments where users frequently connect and disconnect, such as mobile settings with asynchronous notifications, and in systems with a large number of users accessing limited content, like streaming services . It's also useful in event dissemination where receivers are unknown or change frequently .

También podría gustarte