Comunicaciones en Grupo

 

Comunicación en Grupo

Una hipótesis subyacente e intrínseca de RPC es que la comunicación solo es entre dos partes: el cliente y el servidor [25, Tanenbaum].

 

A veces existen circunstancias en las que la comunicación es entre varios procesos y no solo dos (ver Figura 8.11 [25, Tanenbaum]):

Ej.: un grupo de servidores de archivo que cooperan para ofrecer un único servicio de archivos tolerante a fallos:

  • Sería recomendable que un cliente envíe el mensaje a todos los servidores para garantizar la ejecución de la solicitud aunque alguno falle.

  • RPC no puede controlar la comunicación de un servidor con muchos receptores, a menos que realice RPC con cada uno en forma individual.

Comunicación punto a punto y comunicación uno a muchos.

 

 

Un grupo es una colección de procesos que actúan juntos en cierto sistema o alguna forma determinada por el usuario.

La propiedad fundamental de todos los grupos es que cuando un mensaje se envía al propio grupo, todos los miembros del grupo lo reciben.

Se trata de una comunicación uno - muchos (un emisor, muchos receptores), que se distingue de la comunicación puntual o punto a punto (un emisor, un receptor).

 

Los grupos son dinámicos:

  • Se pueden crear y destruir.
  • Un proceso se puede unir a un grupo o dejar a otro.
  • Un proceso puede ser miembro de varios grupos a la vez.

 

La implantación de la comunicación en grupo depende en gran medida del hardware:

En ciertas redes es posible crear una dirección especial de red a la que pueden escuchar varias máquinas:

  • Cuando se envía un mensaje a una de esas direcciones se lo entrega automáticamente a todas las máquinas que escuchan a esa dirección.
  • Esta técnica se denomina multitransmisión.
  • Cada grupo debe tener una dirección de multitransmisión distinta.

 

Las redes que no soportan multitransmisión operan con transmisión simple:

  • Significa que los paquetes que tienen cierta dirección se entregan a todas las máquinas.
  • Se puede utilizar para implantar los grupos, pero es menos eficiente que la multitransmisión.
  • Cada máquina debe verificar, mediante su software, si el paquete va dirigido a ella: En caso negativo se descarta, pero para analizarlo se generó una interrupción y se dedicó ciclos de cpu.

 

Otra solución es implantar la comunicación en grupo mediante la transmisión por parte del emisor de paquetes individuales a cada uno de los miembros del grupo:

  • En vez de un paquete se precisan “n” paquetes.
  • Es menos eficiente que las soluciones anteriores.
  • Es una solución valida particularmente con grupos pequeños.
  • El envío de un mensaje de un emisor a un único receptor se llama unitransmisión.

 

 

Aspectos del Diseño de la Comunicación en Grupo

En la comunicación en grupo también se presentan posibilidades tales como [25, Tanenbaum]:

  • Almacenamiento en buffers vs. el no almacenamiento.
  • Bloqueo vs. no bloqueo.

Además existen otras posibilidades que no se dan en la comunicación entre un emisor y un solo receptor.

 

 

 

Grupos Cerrados Vs. Grupos Abiertos

En los grupos cerrados:

  • Solo los miembros del grupo pueden enviar hacia el grupo.
  • Los extraños no pueden enviar mensajes al grupo como un todo, peor pueden enviar mensajes a miembros del grupo en lo individual.

 

En los grupos abiertos:

  • Cualquier proceso del sistema puede enviar a cualquier grupo.

 

Los grupos cerrados se utilizan generalmente para el procesamiento paralelo:

  • Ej.: un conjunto de procesos que trabajan de manera conjunta, tienen su propio objetivo y no interactúan con el mundo exterior.

 

Cuando la idea de grupo pretende soportar servidores duplicados:

  • Es importante que los procesos que no sean miembros (clientes) puedan enviar hacia el grupo.
  • Podría ser necesario que los miembros del grupo utilizaran la comunicación en grupo.

 

 

 

Grupos de Compañeros Vs. Grupos Jerárquicos

En algunos grupos todos los procesos son iguales:

  • No existe distinción de jerarquías.
  • Son los grupos de compañeros.

 

En otros grupos existe cierto tipo de jerarquía:

  • Son los grupos jerárquicos.
  • Ej.: un proceso es el coordinador y todos los demás son los trabajadores.
  • Una solicitud de un trabajo que se genere en un cliente externo o en uno de los procesos trabajadores:
  • Se envía al coordinador.
  • El coordinador decide cuál de los trabajadores es el más adecuado para llevarla a cabo y se la envía.

 

 

Cada tipo de grupo tiene sus ventajas y desventajas:

Respecto del grupo de compañeros:

  • Es simétrico y no tiene un punto de fallo.
  • Si uno de los procesos falla, el grupo se reduce pero puede continuar.
  • Para tomar decisiones grupales se producen retrasos debidos a la comunicación entre los miembros del grupo.

Respecto del grupo jerárquico:

  • La pérdida del coordinador lleva al grupo a un alto total, lo que es una desventaja.
  • En condiciones normales, el coordinador funciona correctamente y toma decisiones sin molestar a los demás procesos.

 

Un ej. de grupo jerárquico podría ser un programa de ajedrez en paralelo:

El coordinador:

  • Toma el tablero actual.
  • Genera todos los movimientos válidos a partir de él
  • Los envía a los trabajadores para su evaluación.
  • Controla la estrategia de búsqueda.
  • Desarrolla el árbol del juego.

Los trabajadores:

  • Al procesar las evaluaciones generan nuevos tableros.
  • Los tableros se envían al coordinador.
  • Al quedar inactivos, solicitan al coordinador un nuevo tablero en el cual trabajar.

 

 

Membresía del Grupo

La comunicación en grupo requiere cierto método para:

  • Creación y eliminación de grupos.
  • Unión y separación de procesos a grupos.

 

Una posibilidad es tener un servidor de grupos al cual enviar todas las solicitudes:

  • Es un método directo, eficiente y fácil de implementar.
  • La desventaja es el punto de fallo que representa la administración centralizada de los grupos.

 

Otra posibilidad es la administración distribuida de las membresías a grupos:

  • En un grupo abierto, un proceso extraño puede enviar un mensaje a los integrantes del grupo para anunciar su presencia.
  • En un grupo cerrado se precisa algo similar, ya que se debe contemplar la admisión de nuevos miembros al grupo cerrado.
  • Al salir de un grupo, el proceso debe comunicarlo a los demás del grupo que deja.

 

Un aspecto problemático se presenta cuando un miembro falla, saliendo por lo tanto del grupo:

  • No hay un anuncio apropiado de este hecho.
  • Los demás miembros del grupo lo deben descubrir de forma experimental; luego se lo puede eliminar del grupo.

 

Otro aspecto importante es que la entrada y salida al grupo debe sincronizarse con el envío de mensajes:

  • Un proceso que se unió a un grupo debe recibir todos los mensajes que se envíen al mismo.
  • Un proceso que ha salido de un grupo:
  • No debe recibir más mensajes del grupo.
  • El grupo no debe recibir más mensajes del proceso.
  • Los otros miembros no deben recibir más mensajes del proceso saliente.
  • Una forma de garantizar que una entrada o salida se integra al flujo de mensajes en el lugar correcto es convertir esta operación en un mensaje a todo el grupo.

 

Un aspecto crítico resulta cuando fallan tantas máquinas que el grupo ya no puede funcionar:

  • Se necesita cierto protocolo para reconstruir el grupo.
  • Alguno de los procesos deberá tomar la iniciativa.
  • El protocolo deberá resolver la situación que se presenta cuando dos o más procesos intentan al mismo tiempo reconstruir el grupo.

 

 

Direccionamiento al Grupo

Los grupos deben poder direccionarse, al igual que los procesos.

Una forma es darle a cada grupo una dirección única, similar a una dirección de proceso.

 

Si la red soporta multitransmisión:

  • La dirección del grupo se puede asociar con una dirección de multitransmisión.
  • Cada mensaje enviado a la dirección del grupo se podrá multitransmitir.

 

Si la red no soporta multitransmisión:

  • Se tendrá que utilizar transmisión simple.
  • Cada núcleo lo recibirá y extraerá la dirección del grupo.
  • Si ninguno de los procesos en la máquina es un miembro del grupo, se descarta la transmisión.
  • En caso contrario se transfiere a todos los miembros del grupo.

 

Si la red no soporta multitransmisión ni transmisión simple:

  • Se tendrá que utilizar unitransmisión.
  • El núcleo de la máquina emisora deberá contar con una lista de las máquinas que tienen procesos pertenecientes al grupo.
  • Deberá enviar a cada máquina un mensaje puntual.

 

Un segundo método de direccionamiento de grupo consiste en pedirle al emisor una lista explícita de todos los destinos:

  • Ej.: lista de direcciones IP.
  • El parámetro de la llamada send que especifica el destino es un apuntador a una lista de direcciones.
  • La desventaja consiste en que los procesos del usuario (los miembros del grupo) deben tener conocimiento de quién es miembro de cada grupo:
  • No es transparente.
  • Los procesos del usuario deben actualizar las listas de miembros.

 

Un tercer método es el de direccionamiento de predicados (predicate addressing):

  • El mensaje se envía a todos los miembros del grupo (o a todo el sistema) mediante uno de los métodos anteriores.
  • El mensaje contiene un predicado (expresión booleana) para ser evaluado.
  • El predicado puede utilizar el número de máquina del receptor, sus variables locales u otros factores.
  • Si el valor del predicado es “verdadero” se acepta el mensaje y se descarta si es “falso”.
  • Permite enviar un mensaje solo a aquellas máquinas que tengan al menos “x” mb de memoria libre y se puedan ocupar de un nuevo proceso.