Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Distribuidos
Permite la interaccin entre aplicaciones y servicios del
sistema.
App./Servicios App./Servicios
Aplicaciones
y RMI/RPC
Servicios Interfaz
Protocolo y
y
API (sockets) Representacin
Lgica de
TCP/UDP Comunicacin TCP/UDP
ATM/Ethernet
Primitivas de
Comunicacin
Cada una de las funciones de comunicacin de una
tecnologa determinada. Las primitivas bsicas son:
Envo: send(destino,mensaje).
Recepcin: receive(fuente,mensaje).
Otras primitivas:
Conexin: connect(destino).
Desconexin: close().
EMISOR 8 5 RECEPTOR
7 RED 6
1 Ncleo ACK Ncleo 4
Emisor msg Receptor
2 3
Envo no bloqueante: [1:8] El emisor continua al pasar el mensaje al ncleo.
Envo bloqueante: [1:2:7:8] El emisor espera a que el ncleo transmita por red el
mensaje.
Envo bloqueante fiable: [1:2:3:6:7:8]: El emisor espera a que el ncleo receptor
recoge el mensaje.
Envo bloqueante explcito: [1:2:3:4:5:6:7:8]: Idem al anterior, pero es la
aplicacin receptora la que confirma la recepcin.
Peticin-Respuesta: [1:2:3:4:<servicio>:5:6:7:8]: El emisor espera a que el
receptor procese la operacin para reanudar la ejecucin.
Direccionamiento
Mecanismos:
Direccin dependiente de la localizacin:
Por ejemplo: direccin mquina + direccin puerto local.
No proporciona transparencia.
Direccin independiente de la localizacin (dir. lgica):
Facilita transparencia.
Necesidad de proceso de localizacin:
Mediante broadcast.
Uso de un servidor de localizacin que mantiene relaciones entre
direcciones lgicas y fsicas.
Uso de cache en clientes para evitar localizacin.
Comunicacin en Grupo
Modelos de grupos:
Grupo abierto.
Grupo abierto controlado.
Grupo cerrado.
Comunicacin en Grupo
Problemtica:
Comunicacin fiable es difcil.
Escalabilidad de las tecnologas (Internet con MBone).
Gestin de grupos.
Encaminamiento (Flooding, Spanning Tree, RPB, TRPB, RPM).
Ordenacin en
Comunicacin en Grupo
De acuerdo a las garantas de ofrecidas en la
recepcin de mensajes de grupo se tienen:
Ordenacin FIFO: Los mensajes de una fuente
llegan a cada receptor en el orden que son
enviados.
Cliente-Servidor
<Paso de Mensajes>
Berkeley Sockets
Java Sockets
Paso de Mensajes
Los modelos de comunicacin basados en cliente-servidor con paso
de mensajes responden al esqueleto:
Send(msg) Receive(msg)
msg
Mensaje msg,reply;
Mensaje op,ack;
msg=<dato a trasmitir>
receive(op);
send(msg);
if(validOp(op))
receive(reply);
ack=<operacin OK>
if(isOK(reply))
else
<operacin correcto>
ack=<operacin ERROR>
else
send(ack);
<error en operacin>
...
...
Paso de Mensajes
send(confirm);
Formatos de Representacin
Arquitectura Arquitectura
little-endian big-endian
0005 0 1 2 3
0005
Dato a enviar: 5
3 2 1 0 Valor: 5x224+0x216+0x28+0
0005
Dato a recibido: 83.886.080
Valor: 0x224+0x216+0x28+5
Berkeley Sockets
Aparecieron en 1981 en UNIX BSD 4.2
Intento de incluir TCP/IP en UNIX.
Diseo independiente del protocolo de comunicacin.
Un socket es punto final de comunicacin (direccin IP y puerto).
Abstraccin que:
Ofrece interfaz de acceso a los servicios de red en el nivel de
transporte.
Representa un extremo de una comunicacin bidireccional con
una direccin asociada.
Berkeley Sockets
Actualmente:
Disponibles en casi todos los sistemas UNIX.
En prcticamente todos los sistemas operativos:
WinSock: API de sockets de Windows.
En Java como clase nativa.
Conceptos Bsicos sobre Sockets
Dominios de comunicacin.
Tipos de sockets.
Direcciones de sockets.
Creacin de un socket. 1.- Creacin del socket
Asignacin de direcciones.
Solicitud de conexin.
Preparar para aceptar conexiones.
2.- Asignacin de direccin
Aceptar una conexin.
Transferencia de datos.
Algunos ejemplos:
PF_UNIX (o PF_LOCAL): comunicacin dentro de
una mquina.
PF_INET: comunicacin usando protocolos TCP/IP.
Tipos de Sockets
Stream (SOCK_STREAM):
Orientado a conexin.
Fiable, se asegura el orden de entrega de mensajes.
No mantiene separacin entre mensajes.
Si PF_INET se corresponde con el protocolo TCP.
Datagrama (SOCK_DGRAM):
Sin conexin.
No fiable, no se asegura el orden en la entrega.
Mantiene la separacin entre mensajes.
Si PF_INET se corresponde con el protocolo UDP.
Raw (SOCK_RAW):
Permite el acceso a los protocolos internos como IP.
Direcciones de Sockets
bind()
Proceso cliente
socket() listen()
Abrir conexin
accept() Posible
connect()
Ejecucin
en Paralelo
accept()
Peticin
send()/write() recv()/read()
Respuesta
recv()/read() send()/write()
close() close()
Sockets en Java
Llamadas a
Procedimientos
<RPC> Remotos
Sun RPCs
Llamadas a Procedimientos Remotos
Servidor
... ...
Cliente
msg
send(msg) receive(msg)
... ...
rpy
receive(rpy) send(rpy)
Paso de mensajes (visin de bajo nivel)
Servidor
... {
Cliente
... ...
x=buscar(1556) ...
... return val;
}
Llamadas a procedimientos remotos (ms alto nivel) Comodidad
Llamadas a
Procedimientos Remotos
Remote Procedure Call: RPC.
Evolucin:
Propuesto por Birrel y Nelson en 1985.
Sun RPC es la base para varios servicios actuales (NFS
o NIS).
Llegaron a su culminacin en 1990 con DCE
(Distributed Computing Environment) de OSF.
Han evolucionado hacia orientacin a objetos:
invocacin de mtodos remotos (CORBA, RMI).
Funcionamiento General
de RPC
Cliente:
El proceso que realiza una la llamada a una funcin.
Dicha llamada empaqueta los argumentos en un mensaje y
se los enva a otro proceso.
Queda la espera del resultado.
Servidor:
Se recibe un mensaje consistente en varios argumentos.
Los argumentos son usados para llamar una funcin en el
servidor.
El resultado de la funcin se empaqueta en un mensaje que
se retransmite al cliente.
Cdigo cliente.
Cdigo del servidor.
Formato de representacin.
Definicin del interfaz.
Localizacin del servidor.
Semnticas de fallo.
int buscar(int cod)
Servidor
Cliente
... {
... ...
x=buscar(1556) ...
... return val;
}
Cdigo Cliente/Cdigo Servidor
Las funciones de abstraccin de una llamada RPC a
intercambio de mensajes se denominan resguardos (stubs).
SISTEMA CLIENTE SISTEMA SERVIDOR
CDIGO DE LA APLICACIN PROCEDIMIENTOS
5
INICIO FIN EJECUTA
LLAMADA LLAMADA PROCEDIMIENTO
REMOTO
RESGUARDO PREPARA RESGUARDO CONVIERTE 4
CLIENTE 1 ENTRADA SERVIDOR ENTRADA
CONVIERTE 9 6 PREPARA
SALIDA SALIDA
BIBLIOT. ENVA BIBLIOT. RECIBE 3
EJECUCIN 2 ENTRADA EJECUCIN Y PASA
RPC RECIBE RPC
8 7 TRANSMITE
SALIDA SALIDA
Resguardos (stubs)
Tipos de enlace:
Enlace no persistente: la conexin entre el cliente y el servidor se
establece en cada llamada RPC.
Enlace persistente: la conexin se mantiene despus de la primera
RPC:
til en aplicaciones con muchas RPC repetidas.
Problemas si lo servidores cambian de lugar o fallan.
Enlazador
Dinmico
Enlazador dinmico (binder): Es el servicio que
mantiene una tabla de traducciones entre nombres
de servicio y direcciones. Incluye funciones para:
Registrar un nombre de servicio (versin).
Eliminar un nombre de servicio.
Buscar la direccin correspondiente a un nombre de
servicio.
enva peticin
Desempaqueta
la respuesta
Semntica Fallos
Problemas que pueden plantear las RPC:
El cliente no es capaz de localizar al servidor. [1]
Se pierde el mensaje de peticin del cliente al servidor. [2]
Se pierde el mensaje de respuesta del servidor al cliente. [3]
El servidor falla despus de recibir una peticin. [4]
El cliente falla despus de enviar una peticin. [5]
[1] ?
[4]
[5]
[2]
Cliente no Puede
Localizar al Servidor
El servidor puede estar cado
El cliente puede estar usando una versin antigua
del servidor
La versin ayuda a detectar accesos a copias
obsoletas
Cmo indicar el error al cliente
Devolviendo un cdigo de error (-1)
No es transparente
Ejemplo: sumar(a,b)
program SUMAR {
version SUMAVER {
int SUMA(peticion) = 1;
} = 1;
} = 99;
Programacin con un
Paquete de RPC
El programador debe proporcionar:
La definicin de la interfaz (fichero idl)
Nombres de las funciones
Parmetros que el cliente pasa al servidor
Resultados que devuelve el servidor al cliente
El cdigo del cliente
El cdigo del servidor
El compilador de idl proporciona:
El resguardo del cliente
El resguardo del servidor
Programacin con
RPC
DESARROLLO
DE LA
INTERFAZ
FICHERO
DE DEFINICIN
DE INTERFAZ
COMPILADOR IDL
COMPILADOR C COMPILADOR C
MONTADOR MONTADOR
EJECUTABLE EJECUTABLE
DESARROLLO DEL DEL DESARROLLO
DEL CLIENTE SERVIDOR DEL
CLIENTE SERVIDOR
Esquema de una
Aplicacin cliente.c
Archivos para
el cliente
idl_clnt.c
idl_xdr.c
repcgen Archivos
idl.x
comunes
idl.h
idl_svc.c
Archivos para
el servidor
servidor.c
Sistemas Operativos Distribuidos
Entornos de
Objetos
<Objetos Remotos> Distribuidos
Java RMI
CORBA
Motivacin
Ventajas:
Los mtodos remotos estn asociados a objetos remotos.
Ms natural para desarrollo orientado a objetos.
Admite modelos de programacin orientada a eventos.
Problemas:
El concepto de referencia a objeto es fundamental.
Objetos voltiles y objetos persistentes.
Objetos-Distribuidos
Caractersticas:
Uso de un Middleware: Nivel de abstraccin para la
comunicacin de los objetos distribuidos. Oculta:
Localizacin de objetos.
Protocolos de comunicacin.
Hardware de computadora.
Sistemas Operativos.
Modelo de objetos distribuidos: Describe los aspectos
del paradigma de objetos que es aceptado por la
tecnologa: Herencia, Interfaces, Excepciones,
Polimorfismo, ...
Recogida de basura (Garbage Collection): Determina
los objetos que no estn siendo usados para a liberar
recursos.
Tecnologas de Objetos
Distribuidos
Actualmente existen tres tecnologas de desarrollo
de sistemas distribuidos basados en objetos:
ANSA (1989-1991) fue el primer proyecto que
intent desarrollar una tecnologa para modelizar
sistemas distribuidos complejos con objetos.
DCOM de Microsoft.
CORBA de OMG.
Tecnologas Java de Sun Microsytems:
Remote Method Invocation (RMI).
Enterprise Java Beans (EJB).
Jini.
Diferentes entornos de trabajo propietarios.
Java RMI
Ejemplo:
Cuenta cnt = new CuentaImpl();
String url = rmi://java.Sun.COM/cuenta;
// enlazamos una url a un objeto remoto
java.rmi.Naming.bind(url, cnt);
....
// bsqueda de la cuenta
cnt=(Cuenta)java.rmi.Naming.lookup(url);
Arquitectura de Java
RMI
Arquitectura de Java
RMI
Nivel de transporte: se encarga de las
comunicaciones y de establecer las conexiones
necesarias
Nivel de gestin de referencias remotas: trata los
aspectos relacionados con el comportamiento
esperado de las referencias remotas (mecanismos
de recuperacin, etc.)
Nivel de resguardo/esqueleto (proxy/skeleton) que
se encarga del aplanamiento (serializacin) de los
parmetros
proxy: resguardo local. Cuando un cliente realiza una
invocacin remota, en realidad hace una invocacin
de un mtodo del resguardo local.
Esqueleto (skeleton): recibe las peticiones de los
clientes, realiza la invocacin del mtodo y devuelve
los resultados.
Desarrollo de Aplicaciones
RMI
1
Definicin de la
interfaz remota
2
Implementacin de la
interfaz remota
(.java)
3
javac
(.class)
4
rmic Servidor
(.class)
8 usa Esqueleto
Esqueleto
Cliente (.class)
(.class)
(.java)
5
9 Arrancar RMIRegistry
javac
6
(.class) Crear los objetos
10
Ejectuar 7
Cliente Registrar los objetos
CLIENTE SERVIDOR
Registro de Objetos
Cuenta mi_cuenta=
(Cuenta)Naming.lookup("rmi://"+host+"/"+M
iCuenta");
Facilidades Interfaces
Servicios
Comnes de Dominio
ORB
Aplicaciones
OMA
Servicios:
Proporcionan funciones elementales necesarias para
cualquier tipo de entorno distribuido,
independientemente del entorno de aplicacin.
Facilidades Comunes:
Proporcionan funciones, al igual que los servicios
vlidas para varios dominios pero ms complejas.
Estn orientadas a usuarios finales (no al desarrollo
de aplicaciones).
Interfaces de Dominio:
Proporcionan funciones complejas, al igual que las
Facilidades, pero restringidas a campos de
aplicacin muy concretos. Por ejemplo,
telecomunicaciones, aplicaciones mdicas o
financieras, etc.
Aplicaciones:
El resto de funciones requeridas por una aplicacin
en concreto. Es el nico grupo de objetos que
OMG no define, pues esta compuesto por los
objetos propios de cada caso concreto.
ORB:
(Object Request Broker)
Servidor
Cliente void ingresar(long){
x->ingresar(30) ....
.... }
ORB
IDL de CORBA
interface Cuenta
{
void ingresar(in long cantidad);
void retirar(in long cantidad);
long balance();
};
IDL de CORBA
Language Mappings:
Traducen la definicin IDL a un lenguaje de
programacin como:
C++,
Ada,
COBOL,
SmallTalk,
Java,
...
generado en base a la
Interface Cuenta
{
Marshalling: Traduccin
de los argumentos a un
formato intermedio y
Cuenta_Stub.c++
class Cuenta_Stub : ...
pedir al ORB su{
ejecucin. void ingresar(CORBA::Long &cantidad)
{ <MARSHALLING> }
}
IDL de CORBA
El cdigo servidor Compilador IDL
generado en base a la
definicin IDL (skeleton)
contiene las llamadas Cuenta_Skel.c++
para realizar el proceso class Cuenta_Skel : ...
inverso (de-
{
virtual
marshalling). Cuenta_Stub.c++
void ingresar(CORBA::Long &cantidad)=0;
void __ingresar()
{
De-marshalling: <DE-MARSHALLING>
se invoc el mtodo,
construir la llamada y
realizar la peticin.
IDL de CORBA
ORB ORB
Componentes de un ORB
Stub:
Cdigo cliente asociado al objeto remoto con el
que se desea interactuar. Simula para el cliente los
mtodos del objeto remoto, asociando a cada uno
de los mtodos una serie de funciones que realizan
la comunicacin con el objeto servidor.
Skeleton:
Cdigo servidor asociado al objeto. Representa el
elemento anlogo al stub del cliente. Se encarga
de simular la peticin remota del cliente como una
peticin local a la implementacin real del objeto.
Componentes de un ORB
DII:
(Dynamic Invocation Interface)
Alternativa al uso de stubs estticos que permite
que un cliente solicite peticiones a servidores cuyos
interfaces se desconocan en fase de compilacin.
DSI:
(Dynamic Skeleton Interface)
Alternativa dinmica al uso de skeletons estticos
definidos en tiempo de compilacin del objeto. Es
usado por servidores que durante su ejecucin
pueden arrancar diferentes objetos que pueden ser
desconocidos cuando se compil el servidor.
Componentes de un ORB
ORB/Interface ORB:
Elemento encargado de (entre otras) las tareas
asociadas a la interconexin entre la computadora
cliente y servidor, de forma independiente de las
arquitecturas hardware y SSOO.
Debido a que tanto clientes como servidores pueden
requerir de ciertas funcionalidades del ORB, ambos
son capaces de acceder a las mismas por medio de
un interfaz.
Las dos principales responsabilidades del ORB son:
Localizacin de objetos: El cliente desconoce la
computadora donde se encuentra el objeto remoto.
Comunicacin entre cliente y servidor: De forma
independiente de protocolos de comunicacin o
caractersticas de implementacin (lenguaje, sistema
operativo, ...)
Componentes de un ORB
Adaptado de Objetos:
En este elemento se registran todos los objetos que
sirven en un determinado nodo. Es el encargado
de mantener todas las referencias de los objetos
que sirven en una determinada computadora de
forma que cuando llega una peticin a un mtodo
es capaz de redirigrla al cdigo del skeleton
adecuado.
5
ORB ORB Skel. 7 DSI
DII Stub Interface Interface
1 4 Object Adapter (OA)
2 3
ORB ORB
Comunicacin va CORBA
2 3
ORB ORB
Implementacin de un
ORB
El ORB representa a nivel lgico el bus de objetos
que comparten tanto clientes como servidores. A
nivel de prctico puede estar implementado como:
Residente cliente/servidor: Cdigo que tanto
clientes como objetos tiene que enlazar.
Demonio del sistema: Un servicio del sistema
encargado de centralizar las peticiones.
Interno al sistema: Integrado dentro del SO.
Librera: Usado cuando tanto clientes como
servidores residen dentro del mismo espacio de
memoria.
Localizacin de Objetos
IOR:010000000f00000049444c3a4375656e74613a
312e30000002000000000000003000000001010000
160000007175696e6f2e64617473692e66692e7570
6d2e65730041040c000000424f418a640965000009
f40301000000240000000100000001000000010000
001400000001000000010001000000000009010100
00000000
Implementacin del
Servidor
Cuenta.idl
La implementacin del
objeto se disea como una
subclase de la clase
idl generada por el
compilador (el skeleton) de
Cuenta_skel Clase generada
IDL en base a la definicin.
<DEMARSHALLING>
automticamente
Adaptador de Objetos
2- Se registra en el repositorio de
implementaciones un nuevo objeto,
indicando el mandato para ORB
ejecutarlo. Repositorio de
imr create <nombre> <modo> Implementaciones
<programa>
-ORBImplRepoAddr <direc.>
NameService
Servicio de Nombres
bind(MiCuenta,IOR:X)
NameService Cuenta
MiCuenta=IOR:X
Servicio de Nombres
NameService Cuenta
Cliente
MiCuenta=IOR:X
Servicio de Nombres
IOR:X=resolve(MiCuenta)
NameService Cuenta
Cliente
MiCuenta=IOR:X
Servicio de Negociacin
CORBA vs DCOM
CORBA es un estndar abierto y no propietario.
CORBA proporciona soporte para diversos SO.
CORBA es ms completo y flexible.
CORBA da una salida a los legacy systems
CORBA vs RMI
CORBA permite una mayor heterogeneidad en el
desarrollo de aplicaciones (RMI slo se puede
desarrollar con Java).
CORBA ademas de las funcionalidades de
comunicacin, proporciona servicios.
RMI funciona sobre CORBA (IIOP).