Sistemas Distribuidos

Transcripción

Sistemas Distribuidos
En este capítulo trataremos las cuestiones de comunicación a tener en cuenta en un
sistema distribuido, no obstante lo haremos con un alto nivel de abstracción,
considerando el modelo de comunicación entre los distintos componentes del sistema.
En primer lugar abordaremos los mecanismos para referenciar los componentes que se
ofrecen un un sistema distribuido, esto es, la Denominación y Servicio de Nombres.
Seguidamente presentamos tres modelos concretos de comunicación apropiados para la
comunicación entre los procesos que componen el sistema distribuido: las llamadas a
procedimientos remotos (RPC’s) de Sun, la invocación a métodos remotos (RMI) de
Java y el modelo de CORBA.
Sistemas
Distribuidos
La particularidad de estos mecanismos estriba en que mantiene a los procesos
abstraídos del hecho de que forman un sistema distribuido, y que la comunicación entre
ellos se realiza de igual manera a la comunicación con los procesos locales de cada
máquina.
1. Introducción
2. Modelos arquitectónicos
3. Servicio de Nombres
1. El Modelo de Comunicación
2. Denominación y servicio de nombres
Sistemas Distribuidos
Sistemas Distribuidos
Servicio de Nombres - 1
La Comunicación - 1
Los Modelos de Comunicación
Máquina 1
P1
P3
P2
Máquina 2
P6
RED
P8
P4
P7
P9
Los componentes de un sistema distribuido no solamente están separados lógicamente,
sino también físicamente, por lo que requieren líneas de comunicaciones para
interaccionar.
Nosotros supondremos aquí que las aplicaciones y software básico de un sistema
distribuido están construidos de tal forma que todos los componentes que requieren o
proporcionan accesos a recursos están implementados como procesos.
Para que los procesos remotos implicados en un mismo trabajo puedan interaccionar,
parece claro que se va a requerir una comunicación entre ellos para:
- Transferencia de datos
- Sincronización de operaciones o acciones.
Los procesos
están separados
Para la implementación de un sistema de paso de mensajes entre distintos ordenadores
se requiere una red de comunicaciones con los consiguientes protocolos de
comunicación para la transmisión de datos y señales de sincronización. Nosotros nos
vamos a centrar únicamente en la semántica del alto nivel.
Lógicamente
Físicamente
Se requiere una línea de comunicaciones
para
Transferir Datos
¿Cómo se
Una Pareja
comunican un
grupo de
A un Grupo
procesos?
Sincronizarse
Modelo CLIENTE-SERVIDOR
Modelo MULTICAST
El mecanismo de comunicación que se va a utilizar para la comunicación entre procesos
remotos va a ser el paso de mensajes, con la misma semántica que el correspondiente a
los sistemas operativos centralizados. Es decir, que se va a disponer de primitivas de
envío y recepción de mensajes, y que estas operaciones pueden ser síncronas o
asíncronas (bloqueantes o no bloqueantes). Este mecanismo de comunicación por paso
de mensajes recibe diversos nombres, tales como canales, sockets o puertos.
El rendimiento global de un sistema distribuido tiene una dependencia crítica de los
mecanismos de los subsistemas de comunicaciones utilizados para la intercomunicación
de procesos. Y no depende únicamente de la optimización de los niveles bajos de
comunicaciones, sino de la implementación de la política o modelos de comunicaciones
utilizados.
En los dos siguientes apartados vamos a presentar los dos modelos de comunicación
más comúnmente utilizados en el diseño de sistemas distribuidos:
Modelo cliente-servidor, para comunicación entre parejas de procesos.
Modelo multicast, para comunicación entre grupos de procesos cooperantes.
Sistemas Distribuidos
Sistemas Distribuidos
Servicio de Nombres - 2
La Comunicación - 2
Modelo Cliente
-
La Comunicación
cliente
servidor
1. petición
bloqueado
Servidor
2. procesando
3. respuesta
1. Cliente:
Envío → bloqueado
2. Servidor:Recibe → procesa → contesta
3. Cliente: Recibe respuesta → continúa
RPC
Averiguar_Nodo_Impresor
Imprimir (Fichero,Impresora,ok) Envía (Fichero, Nodo_Impresor)
Recibir (Respuesta, Nodo_Impresor)
LOS SERVIDORES SON DINÁMICOS
¿Cómo se Los servidores deben registrarse con un nombre de
servicio predefinido
conocen los
clientes y los
servidores?
LOS SERVIDORES NO CONOCEN A LOS CLIENTES
Los clientes deben incluir su id. en la petición
Clientes Y
Servidores
Sistemas Distribuidos
Sistemas Distribuidos
NO son máquinas
¡SON
PROCESOS !
El modelo cliente-servidor está orientado a la provisión de servicios. Una conversación
típica consiste en:
1. El proceso cliente transmite una petición al proceso servidor.
2. El proceso servidor ejecuta la petición solicitada.
3. El proceso servidor transmite la respuesta al cliente.
Este modelo implica la transmisión de dos mensajes y alguna sincronización entre el
cliente y el servidor. Es decir, el proceso servidor debe estar pendiente de la llegada de
peticiones del cliente, y a su recepción debe ejecutar el servicio solicitado y comunicar la
respuesta. El proceso cliente por su parte, una vez enviada la petición en el paso 1,
debe esperar bloqueado hasta la recepción de la respuesta después del paso 3.
Este modelo de comunicaciones puede implementarse directamente mediante el
mecanismo de paso de mensajes (operaciones enviar y recibir) del sistema operativo,
pero normalmente se utiliza una construcción del nivel del lenguaje que le abstrae al
programador de las operaciones de envío-espera-recepción. Esta construcción, que
veremos en detalle más adelante, en este capítulo, se conoce como RPC (Remote
Procedure Call) o Llamada a Procedimiento Remoto, y esconde las operaciones de
envío y recepción bajo el aspecto de la llamada convencional a una rutina o
procedimiento.
Estamos viendo cómo se comunica un cliente con un servidor, pero hay una cuestión
que aclarar: ¿cómo han llegado a conocerse el cliente y el servidor para iniciar una
comunicación?
Los procesos clientes no pueden programarse, a priori, con los identificadores de
comunicación de todos los servidores posibles de la red, por lo que se requiere algún
mecanismo que permita un enlace dinámico. Este mecanismo normalmente consiste en
que cuando un proceso servidor arranca, él mismo se registra en un servidor de
nombres indicando su dirección y el nombre predefinido del servicio que proporciona.
Cuando un cliente requiere un servicio, le pregunta a un servidor de nombres por la
dirección de algún servidor que ofrezca tal servicio, obteniendo así su identificador de
comunicación para enviarle la petición.
Por su parte, un proceso servidor, durante su vida, atiende a muchos procesos clientes
distintos sin tener conocimiento previo de ellos, por lo que cada petición debe incluir el
identificador de comunicación del proceso cliente que realiza la petición, para que así le
pueda responder.
Debe tenerse en cuenta que un proceso dado no tiene por qué ser exclusivamente
cliente o servidor. Un proceso se comporta como cliente o servidor en un intercambio
concreto de información o servicio, pero un servidor puede solicitar servicios de otro
servidor, convirtiéndose así en cliente, mientras que en un momento dado un cliente
puede estar prestando un servicio a otro proceso, convirtiéndose a su vez en servidor.
ambivalentes
Servicio de Nombres - 3
La Comunicación - 3
Modelo Multicast
La Comunicación
MULTICAST
Envío de múltiples copias de un mismo
mensaje desde un proceso origen a
múltiples procesos de destino.
Recibe
Recibe
Búsqueda de un objeto o recurso. Un cliente puede enviar un mensaje a un grupo
de procesos servidores, y el que realmente tenga el objeto buscado será el único en
contestar.
Actualizaciones. Cuando se quiere actualizar información común entre varios nodos
–como tablas de encaminamiento o la hora– el proceso encargado del mantenimiento
se lo envía a los demás mediante multicast.
P3
Recibe
Recibe
P4
Envío a
Grupo
P0
Búsqueda de un recurso
APLICACIONES
DE
MULTICAST
Puede haber varios motivos para enviar un mismo mensaje a un grupo de nodos:
Tolerancia a fallos. Un cliente solicita un servicio muy importante mediante
multicast. Uno o más servidores procesan la petición y contestan. El cliente toma la
primera respuesta y deshecha las posteriores. De esta manera, se asegura una
respuesta aunque falle un servidor.
P2
P1
El modelo de comunicación multicast consiste en el envío de un mismo mensaje desde
un origen a un grupo de nodos de destino. No se debe confundir con broadcast (o
difusión), que es el envío de un mensaje de forma que pueda ser escuchado por todos
los nodos de la red, y que en sistemas distribuidos se utiliza con menor frecuencia.
Tolerancia a fallos
Hay diversos algoritmos o métodos para el envío de mensajes en modo multicast, desde
el mero envío secuencial de un mensaje tras otro desde el nodo origen, o la técnica de la
inundación, hasta los basados en árboles de expansión, pero su estudio no está entre
los objetivos de esta asignatura. No obstante sí debemos tener en cuenta que la
elección del algoritmo de envío utilizado puede repercutir seriamente en el rendimiento
general del sistema.
También puede ayudar a mejorar la velocidad de envío el disponer de cierto soporte
hardware que, para el algoritmo que le convenga, posibilite el envío paralelo de las
múltiples copias del mensaje.
El sistema de alto nivel que pueden utilizar los procesos para difundir mensajes a grupos
puede estar basado también en primitivas RPC, aunque con algún mecanismo adicional
en la primitiva de envío para poder indicar las direcciones a las que va dirigido el
mensaje (por ej. una tabla con todas las direcciones o direcciones de grupo).
Actualizaciones múltiples
La velocidad del envío multicast
depende del algoritmo utilizado y
del soporte hardware disponible.
Sistemas Distribuidos
Sistemas Distribuidos
Rendimiento
General del
Sistema
Servicio de Nombres - 4
La Comunicación - 4
Denominación
La Comunicación
DENOMINACIÓN
(Gestión de Nombres)
Es la correspondencia entre
objetos lógicos y físicos
En un sistema distribuido hay que añadir una nueva dimensión a la abstracción: ¿En qué
lugar (máquina) de la red está el objeto referenciado?
ESTRUCTURA DE UN SISTEMA DE NOMBRES
PLANA
JERÁRQUICA
NotasDiaEuiUpmEs
dia.eui.upm.es/Notas.html
atc.eui.upm.es/Notas.html
Capacidad Finita
(nombres relativos al contexto)
Capacidad Ilimitada
Capacidad de Nombres ≠ Capacidad de Identificadores
Capacidad de Identificadores: Limitada
Internet
Capacidad de Nombres:
Sistemas Distribuidos
Sistemas Distribuidos
La denominación, o gestión de nombres, es la correspondencia entre objetos lógicos y
físicos. Por ejemplo, un usuario trata con conjuntos de datos representados por nombres
de ficheros, mientras que el sistema gestiona bloques físicos de datos almacenados en
pistas de un disco. Normalmente el usuario se refiere a un fichero por un nombre
textual, el cual posteriormente se traduce a un identificador numérico que acaba
refiriéndose a bloques de un disco. Esta correspondencia entre los dos niveles
proporciona a los usuarios una abstracción de cómo y dónde están realmente
almacenados los datos.
Capacidad y estructura del esquema de nombres . Veamos ahora cómo puede ser el
espacio de nombres en cuanto a su capacidad y estructura.
El Espacio de Nombres puede tener una capacidad Limitada o Infinita. El actual espacio
de las direcciones de Internet es un ejemplo de capacidad limitada (ej. 138.100.56.34).
En cuanto a su estructura, puede ser Plana o Jerárquica. La estructura plana de
nombres está asociada a espacios de nombres de capacidad finita (a no ser que la
longitud de los nombres sea ilimitada), mientras que en la estructura jerárquica las
direcciones pueden crecer indefinidamente. Cuando se utiliza la estructura jerárquica, se
dice que la resolución de nombres se realiza de “acuerdo al contexto”, es decir,
traduciendo cada uno de los nombres anteriores al nombre final que indican la jerarquía
por la que hay que pasar hasta llegar al objeto concreto. Ejemplo:
dia.eui.upm.es/notas.html hace referencia a un fichero (notas.html) situado
en la máquina dia de la eui de la upm. Para resolver tales nombres se va ascendiendo
por esta jerarquía de nombres, de tal forma que en cada nivel se es capaz de resolver el
nombre y obtener la dirección del siguiente nivel hasta llegar a la máquina de destino, y
en ella obtener el objeto con el nombre indicado (notas.html).
No se debe confundir la capacidad de nombres con la capacidad de identificadores de
dirección. Así, por ejemplo, aunque el actual sistema de direcciones de Internet es finito
(en número de máquinas), el número de algunos recursos referenciables en la red es
ilimitado, puesto que cada máquina puede contar con una estructura jerárquica de
ficheros potencialmente ilimitada (salvo por la capacidad y limitaciones de tablas).
Infinita
Servicio de Nombres - 5
La Comunicación - 5
...Denominación
La Comunicación
Servidor
de
nombres
NOMBRE
[email protected]
IDENTIFICADOR DE
COMUNICACIÓN
138.100.56.67
+ Puerto
N1
b re
nom
Este nuevo servicio de resolución de nombres se denomina Servidor de Nombres (en
inglés también se le conoce como binder, ya que a la traducción de nombres se le
denomina binding). Así, cuando un cliente necesite conocer la dirección de cualquier
servidor, lo único que tiene que hacer es preguntárselo al servidor de nombres. Desde
luego, el servidor de nombres residirá en alguna máquina de dirección bien conocida.
Funciones del Servidor de Nombres. Ya hemos visto que la función básica del
servidor de nombres es la resolución o traducción de un nombre a un identificador, pero
requiere otros servicios adicionales:
id.
MAQ. 1
Podemos ver, entonces, la necesidad de la resolución o traducción de nombres por
identificadores de dirección. Una posibilidad sería que cada programa o sistema
operativo de un sistema distribuido se programara directamente con las direcciones de
todos los objetos actuales y futuros de la red completa, pero no resultaría muy práctico,
pues no es fácil conocer, a priori, todos los posibles objetos de una red, y sería imposible
realizar cualquier cambio de dirección. Parece mucho más razonable ver que esta
resolución de nombres no es más que un nuevo servicio que debe ofrecer el sistema a
los clientes.
Resolución: La traducción del nombre por el identificador de comunicación.
Inclusión: Añadir una pareja nombre/identificador al servidor de nombres.
Borrado: Eliminar una entrada del servidor de nombres.
Modificación: Modificación del nombre/identificador de una entrada.
id
.
N1 ID2
N2 ID7
…
…
N5 ID8
Recurso
SERVIDOR DE
NOMBRES
SERVIDOR
MAQ. 17
MAQ. 2
FUNCIONES DEL
SERVIDOR DE NOMBRES
Resolución
Inclusión
Borrado
Ya hemos comentado que cuando un cliente requiere cualquier servicio del sistema
distribuido, primero es necesario comunicarse con el servidor de nombres para obtener
el identificador de un servidor del servicio requerido. ¡Y si el servidor de nombres falla o
se cae? La respuesta es clara: Se pierden todos los accesos a los servicios del sistema.
Dada la importancia del servidor de nombres, cuyo funcionamiento es vital para el resto
del sistema, parece que se hace necesario que este servicio especial sea tolerante a
fallos. Teniendo en cuenta, además, que va a ser un servicio muy requerido, pues todas
las utilizaciones de cualquier servicio deben pasar primero por él, para facilitar la
tolerancia a fallos y evitar el cuello de botella, suele ser normal que el servicio de
nombres esté formado por servidores replicados que ofrezcan este servicio de nombres.
Modificación
¡Debe Ser Tolerante A Fallos!
Sistemas Distribuidos
Sistemas Distribuidos
Servicio de Nombres - 6
La Comunicación - 6
...Denominación
Para comunicarse un cliente con un servidor, ANTES
debe comunicarse con un servidor de nombres
Para acceder a un objeto remoto, el proceso cliente (que sólo conoce el nombre del
recurso) debe conseguir el identificador de comunicación del recurso que solicita antes
de comunicarse realmente con él. Para ello debe acudir primero a los servidores de
nombres intermedios necesarios hasta conseguir dicho identificador de comunicación,
con el consiguiente tiempo de demora debido a los tiempos de resolución o traducción
de cada uno de los servidores de nombres requeridos.
N1
Cuando se está accediendo a menudo a un objeto remoto, para evitar el tiempo de
resolución de los nombres intermedios, el proceso cliente puede mantener una tabla
caché con los identificadores de dirección de los objetos más recientemente
referenciados, y utilizar directamente estos identificadores para acceder a los objetos.
La Comunicación
b re
nom
MAQ. 1
id
.
N1 ID2
N2 ID7
…
…
N5 ID8
Recurso
SERVIDOR DE
NOMBRES
SERVIDOR
MAQ. 17
En accesos
frecuentes
a un objeto
MAQ. 2
Para evitar tiempos de resolución de nombres
Utilizar CACHÉ LOCAL EN EL CLIENTE
N1
N2
…
N5
N1
ID 2
ID 7
…
ID 8
CACHÉ DE
NOMBRES
MÁQ. 1
Sistemas Distribuidos
Sistemas Distribuidos
id.
Recurso
SERVIDOR
MAQ. 2
Servicio de Nombres - 7
La Comunicación - 7
...Denominación
La Comunicación
A la hora de diseñar un sistema de nombres o de denominación, se deben perseguir
estos dos objetivos:
• Transparencia de ubicación. El nombre de un objeto no debe revelar su ubicación
física.
SE DEBE PERSEGUIR
TRANSPARENCIA
DE UBICACIÓN
(estático)
• Independencia de ubicación. El nombre del objeto no debe cambiar cuando
cambie su ubicación física. Esto implica transparencia dinámica, ya que un nombre
puede asociar el mismo objeto a lugares diferentes en momentos distintos.
INDEPENDENCIA
DE UBICACIÓN
(dinámico)
Actualmente, la mayoría de los sistemas proporcionan simplemente la transparencia de
ubicación, por lo que no ofrecen migración, es decir, el cambio automático de
ubicación de un objeto sin afectar a sus usuarios o clientes. Chorus y Charlotte son
ejemplos de sistemas que permiten la migración.
MIGRACIÓN
Nombres Puros e Impuros. Los nombres puros son simplemente series de bits sin
ninguna interpretación posible (salvo para el servidor de nombres). Otros nombres (los
impuros) incluyen bits que indican directamente una dirección, permisos de acceso o
cualquier otra información sobre el objeto.
Los nombres impuros entran en conflicto con el principio de transparencia al que tanto
hemos aludido. Obsérvese que con un nombre impuro, cualquier información implícita
que lleve, puede quedarse obsoleta si el recurso al que se refiere cambia su dirección,
permisos, etc. Con los nombres puros simplemente hay que preocuparse de mantener
actualizadas las bases de datos de los servidores de nombres de cada contexto.
TIPOS DE NOMBRES
IMPUROS
PUROS
138.100.55.fenix
fenix.eui.upm.es
Tienen información
explícita
Sin interpretación
(salvo para el S.N.)
¿Si hay cambios?
¿Si hay cambios?
OBSOLETO
Requiere actualizaciones
del Servidor de Nombres
Por falta de
TRANSPARENCIA
Sistemas Distribuidos
Sistemas Distribuidos
Servicio de Nombres - 8
La Comunicación - 8
...Denominación
La Comunicación
Si es fácil reproducir el id.
de un proceso sin pedirlo al
servidor de nombres
Puede haber accesos
no autorizados
El Servidor de Nombres debe comprobar la
identidad del cliente antes de proporcionar el id.
CREDENCIALES
(Capabilities)
Credencial de Amoeba
48
Puerto del servidor
Sistemas Distribuidos
Sistemas Distribuidos
24
8
48
Objeto
Derechos
Verificación
Control de acceso. Para evitar accesos no autorizados a los recursos del sistema, un
primer paso consiste en hacer que el identificador de un recurso no se pueda obtener
fácilmente a partir de su nombre si no es a través del servidor de nombres. Y, por
supuesto, el servidor de nombres debe ocuparse de comprobar la identidad del cliente
que solicita una resolución de nombres antes de darles el identificador solicitado. Los
identificadores que se comportan así, se denominan credenciales (capabilities). Por eso
se dice que para poder acceder a un recurso o servicio, previamente debe obtenerse la
credencial correspondiente.
Ejemplo: Credencial de Amoeba. Cuando un cliente requiere cierto servicio, en primer
lugar se identifica y solicita la credencial correspondiente al servidor de nombres, el cual
devuelve la credencial solicitada para el cliente identificado. Una vez se tiene la
credencial, se obtiene de ella el Puerto del servidor que va a prestar el servicio
requerido, con lo que ya se le puede enviar el mensaje con la petición del servicio y la
credencial completa.
El campo Objeto lo utiliza el servidor para identificar el objeto específico con el que el
cliente quiere realizar alguna operación. Para el caso de un archivo, este campo sería
algo parecido a un i-nodo de Unix.
Los Derechos están compuestos por una serie de bits que indican las operaciones que
le están permitidas al usuario para ese objeto (por ej. lectura, escritura, ...).
El campo Verificación se utiliza para dar validez a la credencial. La verificación la
establece el servidor de nombres mediante un cierto algoritmo en función del resto de
los campos de la credencial, y el servidor del objeto comprueba si la verificación que le
llega efectivamente es la correspondiente a esa credencial. De ser así, y si cuenta con
los derechos apropiados realiza la operación solicitada; en caso contrario, devolverá
algún código de error al cliente.
De esta manera se evita que cualquier proceso de la red solicite indiscriminadamente
cualquier operación, pues las credenciales solamente las pueden construir los
servidores de nombres, y solamente mediante éstas puede solicitarse operaciones a los
servidores.
Servicio de Nombres - 9
La Comunicación - 9
...Denominación
La Comunicación
¿Dónde está el binder? El binder nos proporciona la dirección del servidor solicitado,
pero ¿cómo se lo pedimos al binder? ¿dónde está el binder?
Se tienen las siguientes alternativas:
...Denominación
La Comunicación
¿DÓNDE ESTÁ EL BINDER ?
Hay Varias Alternativas
En una
dirección fija
La sabe el S.O.
(var. entorno)
• Que los sistemas operativos de los clientes y de los servidores sean responsables
de proporcionar dinámicamente a sus procesos la dirección del binder. Esto puede
hacerse mediante variables de entorno. Si se reubica el binder, debe actualizarse la
dirección en la variable de entorno del sistema operativo, e informarse a los
usuarios para que rearranquen los procesos. Con este enfoque se permite la
reubicación ocasional del binder sin tener que recompilar todos los clientes y
servidores; normalmente, solo obliga a pararlos y rearrancarlos de nuevo.
Broadcast de
búsqueda
Si cambia la dirección del binder
Recompilar
Todos Clientes
y Servidores
Actualizar var.
de entorno del
S.O.
No Reubicación Dinámica
Sistemas Distribuidos
Sistemas Distribuidos
Sistemas Distribuidos
• Ubicar siempre al binder en un ordenador de dirección bien conocida, e incluirla al
compilar todos los clientes y servidores. Si se reubica el binder, se deben
recompilar todos los clientes y servidores con la nueva dirección. Obviamente, no
es posible la reubicación dinámica del binder.
Ante un fallo, el
cliente/servidor hace
broadcast de nuevo
• Cuando un cliente o un servidor arranca, difunde un mensaje por toda la red para
localizar al binder. Cuando un proceso binder reciba este mensaje, contesta al
emisor con su dirección. Mediante este sistema, el binder puede ejecutarse
siempre sobre cualquier ordenador y reubicarse dinámica y fácilmente.
Reubicación
Dinámica
La Comunicación - 10
Servicio de Nombres - 10
La Comunicación - 10

Documentos relacionados