Post on 24-Sep-2018
Tema 4: Desarrollo de soluciones de SSDD
Sistemas Distribuidos Marcos López Sanz [Curso 2011-2012]
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Índice
Middleware para SSDD
RMI (genérico)
CORBA 2
Java RMI
Enterprise JavaBeans
Middleware para sistemas Peer-to-Peer
Ejercicios
Dudas
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Soluciones de SSDD
Middleware Objetivo:
Ofrecer una abstracción de programación de alto nivel para el desarrollo de SSDD y, mediante capas, ocultar la heterogeneidad de la infraestructura subyacente para mejorar la interoperabilidad y la portabilidad
Alternativas Middleware de objetos distribuidos
• Modelo de programación OO • Comunicación por RMI (mayormente) • Beneficios: encapsulación, abstracción de datos, soluciones flexibles y dinámicas • Ej.: Java RMI, CORBA
Middleware de componentes distribuidos • Retos: evitar dependencias implícitas (referencias en/a interfaces), complejidad
de programación, falta de separación de aspectos distribuidos (seguridad, gestión de errores, concurrencia…), falta de estrategias de despliegue
• Ej.: EJB, DCOM, Fractal
Otras alternativas: • Sistemas Peer-to-Peer • Servicios Web
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
RMI (Remote Method Invocation) Extensión de las RPC (p.ej. Sockets) para un entorno orientado a
objetos Reto: que un objeto local sea capaz de invocar un método de un
objeto potencialmente remoto
Similitudes RPC vs. RMI: Programación con interfaces Construidos sobre protocolos Request-Reply Nivel de transparencia equivalente: misma sintaxis para invocación local
y remota
Diferencias RPC vs. RMI Con RMI se pueden usar técnicas (patrones y metodologías) orientadas a
objetos para su programación Semántica de parámetros más “rica” posibilidad de usar OIDs como parámetros
• Beneficio en el paso por referencia invocación a través del OID remoto en vez de enviar el objeto completo
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
RMI. Cuestiones de diseño Modelo de objetos Conceptos: objeto/clase/métodos/atributos
Propiedades: encapsulación/abstracción/modularidad
Referencias de objetos: nombre.método (parámetros)
Interfaces: definición de las signaturas de los métodos
Acción: resultado de la invocación de un método (cambio de estado, instanciación de un nuevo objeto, etc.)
Excepciones: manejo de errores (throw/catch)
‘Recolector de basura’: eliminación de objetos que ya no se utilizan
Estado: valores de las variables instanciadas
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
RMI. Cuestiones de diseño
Objetos distribuidos
Arquitectura tradicional: cliente/servidor
Servidor: maneja los objetos ‘invocables’
Comunicación (típica) basada en el paso de mensajes de invocación y respuesta
• Alternativas: replicación o migración de objetos
Importante en RMI: encapsulación del estado remoto • Acceso a los atributos sólo por los métodos concurrencia
• Ocultación de los tipos de datos internos utilizados
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
RMI. Cuestiones de diseño Modelo de objetos distribuidos Premisa: cada proceso contiene una colección de objetos que
pueden recibir invocaciones locales o remotas
Conceptos básicos: • Objeto remoto: aquél que puede recibir invocaciones remotas
(aquellos que se ejecutan en procesos diferentes)
• Referencias a objetos remotos: forma de conocer el objeto remoto al que se puede invocar OID remoto
• Interfaz remota: describe los métodos que pueden invocarse de forma remota
» La clase de un método remoto implementa los métodos publicados en su interfaz
» Lenguaje del interfaz: IDL (en CORBA), Java RMI
» Lenguaje de la implementación del IDL: Java, Python, C++, etc.
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
RMI. Implementación
Extraído de Coulouris et al. Distributed Systems: Concepts and Design. 2012
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
RMI. Implementación Módulo de comunicación
Implementan el protocolo de petición-respuesta (p.ej. sobre HTTP o directamente sobre TCP o UDP)
Parámetros (tipo Java): messageType, requestId, operationId
Modulo de referencia remota Transforma las referencias a objetos remotos en referencias locales y viceversa
(marshalling/unmarshalling) Uso de una tabla interna para almacenamiento de correspondencias
‘Servant’: clase en el servidor remoto que ejecuta la petición remota (instanciación remota)
Software RMI (middleware): Proxy (cliente): ofrece transparencia de acceso (invocación remota como local).
Un proxy por cada objeto remoto invocado. Intermediario Dispacher (servidor): recibe las peticiones del módulo de comunicación y las
traslada al ‘skeleton’ Skeleton: clase que implementa los métodos de la interfaz remota. Se encarga
de hacer de intermediario entre la representación ‘pública’ y el objeto real del servidor (‘servant’)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
RMI. Implementación
Generación de proxies, dispatchers y skeletons
Compilador de interfaces (Orbix en CORBA) • Genera el código C++ o Java a partir de un interfaz
• Interfaces: IDL o interfaz Java
Elementos adicionales
Binder: mantiene una tabla de nombres textuales-referencias a objetos remotos:
• CORBA: CORBA Naming System
• Java RMI: RMIregistry
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA Estándar del OMG (1989) Motivación Que los programas (distribuidos) se pudieran programar en
cualquier lenguaje
Premisas: Metáfora: ORB (Object Request Broker) ayudar a un cliente
a invocar un método en un objeto siguiendo las premisas del estilo RMI Fases: localizar el objeto remoto, activar el objeto remoto,
comunicar la petición del objeto cliente al objeto remoto y devolver su respuesta
Versiones CORBA 2: orientado a objetos CORBA 3 (CCM): basado en componentes
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2
Elementos
Un lenguaje de definición de interfaz: IDL
Una arquitectura
Una representación de datos externa (mensajes): CDR
Una forma estándar de identificar referencias de objetos remotos
Un conjunto de servicios genéricos útiles para aplicaciones distribuidas
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. CORBA RMI Modelo de objetos de CORBA
CORBA Object = objeto remoto que: • Implementa una interfaz IDL, • Tiene una referencia de objeto remoto • Es capaz de responder a las invocaciones referidas a las operaciones definidas en su interfaz • Está programado en un lenguaje que no necesariamente es OO
El concepto de clase no está implementado en IDL, sólo tipos de datos
CORBA IDL
Un interfaz IDL especifica un nombre y un conjunto de métodos Ofrece facilidades para especificar módulos, tipos, atributos, signaturas de
métodos e interfaces La gramática es un subconjunto de ANSI C++
Otras características de CORBA
Existen problemas a la hora de hacer los mappings IDLlenguaje de implementación
Existe la posibilidad de definir RMI con CORBA de forma asíncrona (llamadas no bloqueantes)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Ejemplo pizarra compartida
Interfaz IDL
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Arquitectura
Extraído de Coulouris et al. Distributed Systems: Concepts and Design. 2012
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Arquitectura ORB Core
Incluye toda la funcionalidad de comunicación Ofrece una interfaz adicional con varias operaciones:
• Parar e iniciar el ORB • Convertir referencias de objetos remotos y strings • Listas de argumentos para invocaciones dinámicas
Adaptador de objetos Sirve de puente entre los objetos CORBA con interfaces IDL y los
interfaces de programación de las clases ‘servant’ que realmente ejecutan el código remoto invocado
Tareas: • Crear referencias remotas a objetos CORBA • Repartir cada petición RMI hecha a un skeleton al ‘servant’ adecuado • Activar y desactivar ‘servants’
POA (Portable Object Adapter): permite interconectar aplicaciones y ‘servants’ sobre ORBs de diferentes proveedores
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Arquitectura Skeletons
Se generan en el lenguaje del servidor mediante un compilador IDL a partir de un interfaz IDL
Deserializa (unmarshall) las peticiones RMI y serializa (marshall) las excepciones y respuestas
Stubs cliente (proxy) Se generan en el lenguaje del cliente mediante un compilador IDL a
partir de un interfaz IDL También serializan/deserializan
• Proxy: para clientes programados en lenguajes OO • Stub: para clientes programados en otros lenguajes procedurales
Repositorio de implementación Activa y localiza (mapea) servidores registrados correspondientes a los
adaptadores conocidos por el ORB
Repositorio de interfaces Ofrece información acerca de las interfaces IDL registradas en el ORB
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Servicios
Servicio de nombrado (básico en todo ORB)
Servicio de localización por atributo
Servicio de eventos
Servicio de notificación
Servicio de seguridad
Servicio de transacción
Servicio de control de concurrencia
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Ejemplo pizarra compartida
Interfaces Java (a partir de IDL)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Ejemplo pizarra compartida
Clase del servidor en Java (‘servant’)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Ejemplo pizarra compartida
Clase principal del servidor (crea ORB, adaptador y servant)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
CORBA 2. Ejemplo pizarra compartida
Clase principal del cliente
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Java RMI Extiende el modelo de objetos de Java para
entornos distribuidos
Transparencia relativa Excepciones propias: RemoteExceptions
Implementación del objeto remoto: debe implementar la interfaz Remote del paquete java.rmi
Ventaja: lenguaje único las interfaces se programan en Java (no en un lenguaje común IDL como en CORBA)
Si un programa cliente no tiene la clase remota que invoca, ésta se descarga automáticamente
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Java RMI. Ejemplo: pizarra compartida
Definición de la interfaz remota
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Java RMI. Ejemplo: pizarra compartida
Definición del programa del lado del servidor
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Java RMI. RMIRegistry Binder para Java RMI
Una instancia de esta clase debe correr en cada servidor que ofrezca clases RMI
Clase principal: Naming
Argumentos: strings de URL //nombreMaquina:puerto/nombreObjeto
Operaciones: bind/rebind (registrar nombre de objeto remoto),
unbind (desregistrar),
lookup (obtener referencia remota de objeto),
list (lista de nombres registrados)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Java RMI. Ejemplo: pizarra compartida
Definición de la clase servant que implementa la interfaz publicada
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Java RMI. Ejemplo: pizarra compartida
Definición de la clase cliente
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Middleware basado en componentes Problemas del MW de objetos distribuidos
Dependencias implícitas • Una estrategia distribuida no debería indicar sólo las interfaces sino
también los objetos que utilizará durante la invocación (naming, concurrencia, seguridad, transacciones, etc.)
Interacción con el middleware • Una estrategia distribuida debería separar la programación de la aplicación
de la programación de la interacción con el MW
Falta de separación de los aspectos de distribución • Una estrategia distribuida debería permitir que un programador se
abstuviera de tener que conocer aspectos relacionados con NFR del MW
Falta de soporte para el despliegue • Una estrategia distribuida debería ocultar las complejidades de instalación
de una solución distribuida (hacerlo igual que si fuera local)
Consecuencias: Desarrollo de middleware basado en componentes Estilos de middleware: “servidor de aplicaciones”
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Middleware basado en componentes Fundamentos de los componentes
Componente: “Unidad de composición con únicamente una serie de interfaces contractuales y dependencias explícitas del contexto”
Arquitectura de componentes: componentes, interfaces y conexiones entre interfaces a través de puertos
Un componente se define en función de un “contrato” • Interfaces provistas: lo que el componente ofrece como servicios a otros
componentes • Interfaces requeridas: las dependencias que el componente establece en
términos de otros componentes que deben existir (y conectarse a él) para que funcione correctamente
Estilos de interfaces • Aquellos que soportan RMI (tipo CORBA y Java RMI) • Aquellos que soportan eventos distribuidos
Concepto de composición • Objetivo: usar componentes preexistentes y “ensamblarlos” fácilmente
(composición frente a herencia) • COTS: Commercial Off-The-Shelf
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Middleware basado en componentes Fundamentos de los componentes
Programación de sistemas (complejos) basados en componentes = desarrollo de componentes + composición
Concepto de “container” • Elemento que almacena uno o varios componentes que implementan la
aplicación o lógica de negocio • Elementos (similar a una arquitectura 3 capas):
» Front-end ofrecido a un cliente (p.ej. Web) » Contenedor de componentes » Servicios de sistema que gestionan los datos asociados en
almacenamiento persistente • Tarea: ofrecer un entorno de almacenamiento (hosting) del lado del
servidor administrable para componentes y permitir una separación de aspectos de acuerdo a los criterios de diseño deseados
• Intercepta comunicaciones destinadas a los componentes y las redirige a los componentes internos (previa comprobación de cuestiones de NFR)
• El MW que soporta esta tarea se suele llamar “servidor de aplicaciones”
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Middleware basado en componentes
Fundamentos de los componentes
Ejemplos de servidores de aplicaciones: • IBM: WebSphere Application Server
• Sun: Enterprise JavaBeans
• SpringSource (VMWare): Spring Framework
• JBoss Community: JBoss
• OMG: CORBA Component Model (CCM/CORBA 3)
• OW2 Consortium: JOnAS
• Sun: GlassFish
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Middleware basado en componentes Tareas del MW para CBSD: Despliegue de configuraciones de componentes
Liberación de SW empaquetado como arquitecturas CB
Creación de descriptores de despliegue (Apache Ant). Información:
• Suficiente para asegurar que los componentes están bien conectados (protocolos usados y soportados por el MW)
• Configuración del MW (p.ej. de los POA en CORBA)
• Configuración para los servicios del MW
Tecnologías Enterprise JavaBeans (1999)
CORBA Component Model (CCM) (2001)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Enterprise JavaBeans (EJB)
Especificación de una arquitectura de componentes gestionada en el lado del servidor
Perteneciente a la plataforma Java: Java EE
Definido como “modelo de componentes de servidor”
Componente = ‘Bean’: intentan capturar la lógica de negocio
Ofrecen soporte para separar el almacenamiento persistente
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
Enterprise JavaBeans (EJB) Objetivo: mantener una separación de los aspectos (roles) de
gestión del sistema distribuido
Roles: Bean provider: desarrolla la lógica de aplicación del componente Application assembler: agrupa beans en configuraciones de aplicación Deployer: asegura que una configuración de aplicación está bien
desplegada en un entorno operativo Service provider: especializado en servicios propios del SD como gestión
de transaccionalidad o seguridad Persistence provider: especializado en la gestión del almacenamiento
persistente de datos Container provider: (sobre los 2 anteriores) responsable de configurar
los containers correctamente y ofrecer soporte de NFR System administrator: monitorización en tiempo de ejecución
Consecuencia la arquitectura EJB es muy pesada y compleja
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006) Modelo de componentes EJB
Definición de ‘bean’ o ‘JavaBean’: componente que ofrece uno o más interfaces de negocio a potenciales clientes + ‘bean class’ que implementa dichos interfaces
Las interfaces pueden ser remotas (requiere Java RMI o JMS) o locales
Estilos de bean: • Beans de sesión
» Implementa una funcionalidad de negocio » Pueden tener estado (conversación) o no tenerlo
• Beans dirigidos por mensajes » Comunicación indirecta (colas de mensajes) » JMS » Sistemas de eventos
• Beans de entidad » Se usan para acceder a BD » Gestiona la integridad de los datos persistentes
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006) Programación de EJB POJO (Plain Old Java Objects)
• Implementación en Java sin referencia a pertenecer a un bean
‘Annotations’ • Directivas relacionadas con la participación de una clase POJO a un
bean • Forma de asociar metadatos (comportamiento o interpretación)
» Ej. @Stateful public class eShop implements Orders {…}
Contenedores en EJB Contexto de ejecución entre el bean y el servidor Deben ser configurados para ofrecer determinadas políticas de
transaccionalidad, seguridad, persistencia y ciclo de vida Configuración basada en anotaciones
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006) Contenedores en EJB. Interceptación El contenedor EJB intercepta las invocaciones que se hacen a
los componentes internos del contenedor • Interceptación de llamada
» Utilizado para realizar acciones cuando se recibe una invocación o sucede un evento
» Forma de indicar la interceptación: @Interceptors sobre un bean o sobre un método @AroundInvoke indicando un método especial en una clase
• Interceptación de eventos
» @PostConstruct
» @PreDestroy
» @PostActivate
» @PreActivate
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006)
Elementos EJB
Bean: clase que define la lógica de negocio y a la que se accede a través de la interfaz remota
Interfaz remota: indica los métodos que se pueden utilizar del bean
Container: clase que encapsula los beans e implementa la interfaz local
Interfaz local: conjunto de métodos para la creación, acceso y destrucción de las instancias de los beans
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006). Arquitectura
claseCliente Usa la interfaz remota para acceder al Bean
Servidor EJB
Contenedor EJB
interfazLocal • Hereda de EJBHome • Implementa objetoBean create () crea objetos EntityBean
interfazRemota • Hereda de EJBObject • Interfaz visible del Bean
claseBean •Implementa EntityBean • Implementa los métodos de la interfazRemota • Lógica de negocio
objetoClaseBean • Instancia del Bean
define
implementa
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006). claseCliente import java.util.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
public class AccountClient { public static void main(String[] args) {
try {
// Creación de un contexto
Context initial = new InitialContext();
Object objref = initial.lookup("MyAccount");
// Interfaz Home
AccountHome home = (AccountHome)PortableRemoteObject.narrow
(objref, AccountHome.class);
// Creación de Beans:referenciados por su interfaz remoto o "vista del bean"
(Account) Account duke = home.create("123", "Duke", "Earl", 0.00);
// Acceso al Bean por medio del interfaz remoto
duke.credit(88.50); duke.debit(20.25);
double balance = duke.getBalance();
System.out.println("balance = " + String.valueOf(balance));
duke.remove(); ....
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006). interfazRemota (vista del Bean)
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Account extends EJBObject {
public void debit(double amount)
throws InsufficientBalanceException, RemoteException;
public void credit(double amount)
throws RemoteException;
public double getBalance()
throws RemoteException;
}
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006). interfazLocal (creación y localización del Bean)
import java.util.Collection;
import java.rmi.RemoteException;
import javax.ejb.*;
public interface AccountHome extends EJBHome {
public Account create(String id, String firstName,
String lastName)
throws RemoteException, CreateException;
public Account findByPrimaryKey(String id)
throws FinderException, RemoteException;
public Collection findByLastName(String lastName)
throws FinderException, RemoteException;
public Collection findInRange(double low, double high)
throws FinderException, RemoteException;
}
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Objetos y Componentes Distribuidos
EJB 3.0 (2006).
Bean
import java.sql.*;
import javax.sql.*;
import java.util.*;
import javax.ejb.*;
import javax.naming.*;
public class AccountEJB implements EntityBean {
...
public String ejbCreate(String id, String firstName,
String lastName, double balance)
throws CreateException {
try {
insertRow(id, firstName, lastName, balance);
} catch (Exception ex) {
throw new EJBException(ex.getMessage());
}
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.balance = balance;
return id;
}
...
http://www.proactiva-calidad.com/java/ejb/ejb_ejemplo.html
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Objetivo Permitir la compartición de datos y recursos a gran escala eliminando
cualquier requisito que dependa de los servidores intermedios y de la infraestructura subyacente
Careacterísticas (Coulouris et al.) Su diseño asegura que cada usuario contribuye a los recursos del sistema Independientemente del recurso compartido, todo nodo del sistema tiene
la misma responsabilidad y capacidades Su operatividad correcta no depende de la existencia de ninguna entidad
administrativa centralizada Pueden ser diseñados para ofrecer cierto grado de anonimidad a los
proveedores y usuarios de registros La eficiencia del sistema (así como sus capacidades) dependen del
algoritmo implementado para el posicionamiento de los datos en múltiples nodos
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Definición 1 (2004)
Un sistema peer-to-peer es un sistema auto-organizado formado por entidades (peers) iguales y autónomas cuyo objetivo es la utilización compartida de recursos distribuidos en un entorno interconectado evitando la utilización de servicios centralizados
Definición 2
Un sistema que tiene descentralizado tanto la organización (self-organization) como la utilización de recursos
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Utilización de recursos descentralizada Independientemente de la topología de la red, la
comunicación peer-to-peer debe basarse en los principios de comunicación entre extremos (end-to-end)
El conjunto de recursos compartidos se puede referir a almacenamiento, conectividad, presencia humana, etc.
Los peers se conectan a través de una red, normalmente distribuida globalmente (no LAN)
La identificación de los peers suele realizarse mediante identificadores no estructurados derivados de la descripción del contenido compartido
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Auto-organización descentralizada Los peers interactúan directamente entre sí
Los peers acceden a los recursos compartidos sin
necesidad de utilizar un recurso centralizado. Cuando éste existe por motivos de eficiencia, se habla de peer-to-peer híbrido
Flexibilidad: cada peer puede actuar como cliente o como servidor
Los peers de un SSDD P2P son miembros equivalentes con una funcionalidad simétrica
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Generaciones de peer-to-peer
Primera generación
Aproximación no estructurada
Búsquedas basadas en consultas a servidores centralizados que conocían la localización de los datos
Después de la localización: intercambio entre peers
Aproximación híbrida
Ejemplos: Napster (2001)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Generaciones de peer-to-peer
Primera generación: Napster
Extraído de Coulouris et al. Distributed Systems: Concepts and Design. 2012
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Generaciones de peer-to-peer
Segunda generación
Aproximación no estructurada
Búsquedas por inundación (a todos los peers)
Un cliente al menos conoce la IP de otro cliente
Ejemplos: Audogalaxy, Freenet, Gnutella, Kazaa, bitTorrent
Explicación del algoritmo de GNUtella: http://www.slais.ubc.ca/courses/libr500/05-06-wt1/www/R_Martin/Gnu_Arch.htm
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Generaciones de peer-to-peer
Segunda generación: GNutella
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Generaciones de peer-to-peer
Tercera generación Aproximación estructurada
Creación de capas middleware para la gestión independiente de recursos distribuidos
Basado en la existencia de “super-peers” que realizan el enrutamiento intermedio (overlay)
Utilización de técnicas basadas en tablas hash distribuidas (DHT) complejidad de la búsqueda O(log N)
Cada peer tiene asignado un fragmento del espacio de búsqueda
Ejemplos: Pastry, Tapestry, CAN, Chord, Kademlia (Kad/eMule)
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Sistemas Peer-to-Peer
Generaciones de peer-to-peer
Tercera generación: eMule
Protocolo eMule:
http://www.cs.huji.ac.il/labs/danss/p2p/resources/emule.pdf
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Generaciones de peer-to-peer. Resumen
Sistemas Peer-to-Peer
Cap. 5. LNCS 3485
Sistemas distribuidos – Curso 2011-2012 www.kybele.es
Ejercicios
¿Cuál es la diferencia entre RPC y RMI?
¿Cuál es la diferencia entre RMI con CORBA (v2) y Java RMI?
¿Cuál es la diferencia entre un middleware para sistemas distribuidos Peer-to-Peer basado en una estrategia estructurada y aquellos basados en una estrategia no estructurada?