38
RPC/RMI LSUB GSYC 20 de marzo de 2013

RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RPC/RMI

LSUB

GSYC

20 de marzo de 2013

Page 2: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

(cc) 2013 Laboratorio de Sistemas,Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento -

NoComercial - SinObraDerivada (by-nc-nd). Para obtener la licencia completa, veasehttp://creativecommons.org/licenses/. Tambien puede solicitarse a Creative Commons, 559 Nathan Abbott Way,

Stanford, California 94305, USA.

Las imagenes de terceros conservan su licencia original.

Page 3: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RPC

• Llamada a un procedimiento que ejecuta en otro espacio dedirecciones.

• Sigue el modelo cliente/servidor, peticion-respuesta.

• Al usuario se le ocultan los detalles de la comunicacion y de ladistribucion: transparencia de acceso y de distribucion.

Page 4: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RPC

Introduccion a las comunicaciones mediante llamadas a procedimiento remotoIngenierıa de Sistemas Telematicos 2011/2012Grado en Tecnologıas de la TelecomunicacionUniversidad Rey Juan CarlosVersion 1.21

Introduccion

Las llamadas a procedimiento remoto o RPC (Remote Procedure Call) son un mecanismo de comuni-cacion que permiten a un cliente comunicar con un servidor dentro del marco de un sistema distribuidoocultando ciertos detalles de la comunicacion.

Figura 1: Principio de RPC entre cliente y servidor

Una RPC puede considerarse un mecanismo de comunicacion entre procesos (IPC), puesto que unproceso (en forma de subprograma) es ejecutado debido a la ejecucion de su llamada en otro procesodiferente (y habitualmente en otra maquina). El programador que realiza la llamada, por tanto, desconoceque esa llamada es diferente y no se ejecutara en su espacio de direcciones sino en la de otro proceso. Lacomplejidad de la comunicacion queda oculta gracias al mecanismo de RPC.

1. Ejecucion de una RPC

Una RPC involucra una serie de etapas que se ejecutan tanto en la maquina que realiza la llamada(cliente) como en la maquina que ejecuta el procedimiento remoto (servidor).

Figura 2: Pasos en la ejecucion de una RPC

1

Page 5: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RPC: fallos

¿Y si el servidor falla mientras se esta haciendo? Hay distintassemanticas:

• Exactly once: la operacion se realiza una vez. Es caro.

• At most once: la operacion se ejecuta como mucho una vez,pero puede que ninguna. Se retorna error al cliente, que nopuede saber si se ha realizado la operacion o no.

• At least once: la operacion se ejecuta al menos una vez, puedeque varias. Si la operacion es idempotente no hay problema.

Page 6: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Serializacion

• Las maquinas del sistema distribuido pueden ser homogeneaso heterogeneas.

• En ambos casos, tiene que haber una representacion canonicapara los datos.

• Cada extremo debe convertir los datos de su formato local alformato canonico y viceversa: serializacion (marshaling oaplanado).

• Podemos definir nuestra propia serializacion o usar uno de losmultiples estandars: XDR (Sun rpc), JSON, ASN.1,XML-RPC, etc.

Page 7: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Serializacion

Para realizar nuestra propia serializacion tenemos dos alternativas:

• Texto. Factores a tener en cuenta:

• Codificacion (p. ej. UTF-8).• Terminacion de las cadenas.

• Binario. Factores a tener en cuenta:

• Longitud de los datos.• Endianess.• Formato (p. ej: coma flotante IEEE 754, IEEE 754-2008, etc.).

Page 8: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Serializacion

Ejemplo: serializar un array de 3 enteros : 1, -2, 3.

• Texto (UTF-8):"[[1], [-2], [3]]"

• Binario (little endian, 4 bytes por entero, complemento a 2):0x03 0x00 0x00 0x00

0x01 0x00 0x00 0x00

0xfe 0xff 0xff 0xff

0x03 0x00 0x00 0x00

Page 9: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Ejemplo: JSON

• Es un formato de texto.

• Es independiente del lenguaje.

• Permite aplanar:• Una coleccion de pares atributo/valor con el que se pueden

serializar objetos, records, diccionarios, etc.• Lista de valores con el que se pueden aplanar arrays, listas,

conjuntos, etc.

Page 10: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Ejemplo: JSON

Objeto:

{” r e c t a n g u l o ” : {

” v i s i b l e ” : t rue ,” c o l o r ” : ” v e r d e ” ,” s u p I z q ” : {

” x ” : 34 ,” y ” : 30

} ,” i n f D e r ” : {

” x ” : 43 ,” y ” : 10

}}

}

Page 11: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Ejemplo: JSON

Lista:

{” l i s t a C o o r ” : [

{” x ” : 0 , ” y ” : 0} ,{” x ” : 2 , ” y ” : 1} ,{” x ” : 4 , ” y ” : 5} ,{” x ” : 0 , ” y ” : 1} ,{” x ” : −1 , ” y ” : 23}

]}

Page 12: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Serializacion en Java

• Cliente y servidor (ambos en Java) se pueden despreocupardel formato de los datos.

• Una clase que cumpla con la interfaz Serializable se puedeserializar. Esa interfaz no tiene ningun metodo.

• Aplana el objeto y todos los objetos referenciados (web ofobjects).

• Si un miembro es transient no forma parte del estadopersistente del objeto y por tanto no se serializa.

• Si un objeto no se puede serializar, se levanta la excepcionNotSerializableException.

Page 13: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Codigo

F i g u r e s = new Square ( p1 , p2 ) ;ObjectOutputStream os =

new ObjectOutputStream ( sock . getOutputStream ( ) ) ;os . w r i t e O b j e c t ( s ) ;

Page 14: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Serializacion en Java

Las clases que necesitan personalizar la serializacion deben definirlos metodos con estas cabeceras:

p r i v a t e v o i d w r i t e O b j e c t ( j a v a . i o . ObjectOutputStream out )throws I O E x c e p t i o n

p r i v a t e v o i d r e a d O b j e c t ( j a v a . i o . O b j e c t I n p u t S t r e a m i n )throws IOExcept ion , C l a s s N o t F o u n d E x c e p t i o n ;

p r i v a t e v o i d readObjectNoData ( )throws O b j e c t S t r e a m E x c e p t i o n ;

Page 15: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Nombrado

• Necesitamos nombrar los recursos para poder acceder a ellos(p. ej. hacer una RPC sobre un recurso concreto).

• Transparencia de localizacion: permite encontrar los recursoscon independencia de su localizacion fısica.

• El servicio puede ser centralizado o distribuido.

• El esquema de nombrado puede ser plano o estructurado.

Page 16: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Ejemplo: DHT

• Una tabla hash distribuida es un servicio de nombres planos.Como en una tabla hash, a una clave le pertenece un valorasociado.

Page 17: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Ejemplo: DNS

• El DNS es un servicio distribuido de nombres estructuradospara traducir nombres a direcciones IP.

(cc) George Shuklin

Page 18: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Nombres estructurados

• Los nombres estructurados forman un espacio de nombres(name space)

• Generalmente se representan como un grafo dirigido connodos contenedores y nodos hoja,

• Los objetos se pueden nombrar con nombres absolutos orelativos.

• La resolucion puede ser iterativa o recursiva.

Page 19: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Resolucion de nombres iterativa

(c) A. Tanenbaum

Page 20: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Resolucion de nombres recursiva

• Reduce los mensajes en el cliente (puede afectar a la latenciaen gran medida) y facilita el caching.

(c) A. Tanenbaum

Page 21: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Java RMI

Page 22: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI

• OOM (Object Oriented Middleware) de Java.

• Permite:

• Localizar objetos remotos.• Invocar metodos de objetos remotos.• Cargar dinamicamente definiciones de clases remotas.

• El compilador genera los stubs.

• Usa la serializacion de Java.

• El RMI registry se encarga del nombrado.

Page 23: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI

En resumen:

• La clase remota debe estar partida en una interfaz y una claseque la implemente.

• Todos los metodos remotos deben estar especificados en lainterfaz.

• La interfaz debe extender java.rmi.remote.

• Todos los metodos remotos deben especificar que levantanRemoteException.

• Si los metodos usan (argumentos, retorno) otro objeto remoto,este objeto tambien debe ser definido por una interfaz.

Page 24: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Registry

• Es un servicio de nombrado sencillo para localizar los objetosremotos.

• En la maquina en la que creamos el registro debemos ejecutarel comando:

rmiregistry

Page 25: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI

Argumentos en RMI:

• Los objetos remotos se pasan por referencia. El objeto remotoen realidad es una instancia del stub de cliente que lerepresenta.

• Los objetos locales se pasan por valor, se envıa una copia delobjeto serializado. Se copian todos los miembros menos losestaticos y transient.

Page 26: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: servidor

• Si una interfaz exiende la interfaz Remote hace que losmetodos sean accesibles por RMI.

• Las excepciones extra provocadas por los mecanismos de deRMI (el servidor no responde, error de aplanado, etc.) seengloban en RemoteException (es checked).

p u b l i c i n t e r f a c e C l o c k S e r v e r extends Remote {p u b l i c Date getTime ( ) throws RemoteExcept ion ;

}

Page 27: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: Exportar el objeto

• Hay que instanciar un objeto de la clase y exportarlo.

• El metodo estatico exportObject() deUnicastRemoteObject permite crear el stub de servidor paraaceptar peticiones. Su segundo argumento es el puerto TCPque debe usar (0 significa que el puerto es anonimo).

• Dicho metodo retorna el stub de cliente para acceder a esteobjeto, que debemos registrar.

C l o c k S e r v e r c = new Clock ( ) ;C l o c k S e r v e r s t u b =

( C l o c k S e r v e r ) Un icas tRemoteObject . e x p o r t O b j e c t ( c , 0 ) ;

Page 28: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: Exportar el objeto (ii)

• Para registrar el stub de cliente tenemos que localizar elregistro. La clase LocateRegistry permite crear un registroen esta JVM (metodo createRegistry()) o usar un registroexistente(metodo getRegistry()).

• El metodo rebind() registra el stub con un nombre dado.Una aplicacion solo puede registrar objetos remotos en sulocalhost.

R e g i s t r y r e g i s t r y = L o c a t e R e g i s t r y . c r e a t e R e g i s t r y ( 9 9 9 9 ) ;r e g i s t r y . r e b i n d ( ” Maste rC lock ” , s t u b ) ;

Page 29: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Codigo

p u b l i c c l a s s Clock implements C l o c k S e r v e r{p u b l i c Clock ( ) throws RemoteExcept ion{

super ( ) ;}

p u b l i c Date getTime ( ) throws RemoteExcept ion{r e t u r n new Date ( ) ;

}

p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ){t r y {

C l o c k S e r v e r c = new Clock ( ) ;C l o c k S e r v e r s t u b =

( C l o c k S e r v e r ) Un icas tRemoteObject . e x p o r t O b j e c t ( c , 0 ) ;R e g i s t r y r e g i s t r y = L o c a t e R e g i s t r y . c r e a t e R e g i s t r y ( 9 9 9 9 ) ;r e g i s t r y . r e b i n d ( ” Maste rC lock ” , s t u b ) ;System . out . p r i n t l n ( ” Clock bound ” ) ;

} catch ( E x c e p t i o n e ) {System . e r r . p r i n t l n ( ” Clock e x c e p t i o n : ” ) ;e . p r i n t S t a c k T r a c e ( ) ;

}}

}

Page 30: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: cliente

• Debe conseguir una referencia al registro:

R e g i s t r y r e g i s t r y =L o c a t e R e g i s t r y . g e t R e g i s t r y ( ” pc1 . example . org ” , 9 9 9 9 ) ;

Page 31: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: cliente

• Despues consigue el stub de cliente:

C l o c k S e r v e r c =( C l o c k S e r v e r ) r e g i s t r y . l o o k u p ( ” Maste rC lock ” ) ;

Page 32: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Codigo

import org . l s u b . c l o c k s e r v e r . C l o c k S e r v e r ;

p u b l i c c l a s s C l i e n t {p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ){

t r y {R e g i s t r y r e g i s t r y = L o c a t e R e g i s t r y . g e t R e g i s t r y ( a r g s [ 0 ] ,

new I n t e g e r ( a r g s [ 1 ] ) ) ;C l o c k S e r v e r c = ( C l o c k S e r v e r ) r e g i s t r y . l o o k u p ( ” Maste rC lock ” ) ;System . out . p r i n t l n ( ” Maste rC lock s a y s : ” + c . getTime ( ) ) ;

} catch ( E x c e p t i o n e ) {System . e r r . p r i n t l n ( ” Clock e x c e p t i o n : ” ) ;e . p r i n t S t a c k T r a c e ( ) ;

}}

}

Page 33: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

Ejecucion

1 Maquina servidora (omac.lsub.org):rmiregistry&

2 Maquina servidora (omac.lsub.org):java -cp rmiclock.jar org.lsub.clockserver.Clock

3 Maquina cliente (ignatz.lsub.org):java -cp rmiclock.jar org.lsub.clockclient.Client

omac.lsub.org 9999

Salida:MasterClock says: Fri Mar 15 13:23:18 CET 2013

Page 34: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: descarga dinamica de clases

• RMI nos permite descargar clases dinamicamente si el clienteo el servidor no tienen todas las clases necesarias.

• Este mecanismo no es imprescindible, lo mas sencillo esdistribuir un jar con todas las clases.

• Complica la configuracion y puede suponer un problema deseguridad si no se configura con cuidado → no debemosusarlo si realmente no lo necesitamos.

Page 35: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: descarga dinamica de clases

(c) Oracle

Page 36: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: descarga dinamica de clases

• java.rmi.server.codebase es la propiedad que indica laURL que puede usar un cliente para conseguir las clases si noestan en su classpath local.

• La URL se puede especificar como argumento para la VM alejecutar:

-Djava.rmi.server.codebase=http://example.org/classes.jar

Page 37: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: descarga dinamica de clases

Hay que instalar un Security Manager en el cliente y en el servidor:

• Determina los permisos (p. ej. el acceso al FS) del codigodescargado dinamicamente.

• Es necesario instalar uno para descargar clases.

i f ( System . g e t S e c u r i t y M a n a g e r ( ) == n u l l ) {System . s e t S e c u r i t y M a n a g e r ( new S e c u r i t y M a n a g e r ( ) ) ;

}

Page 38: RPC/RMIlsub.org/ist/12.rpcs.pdf · 2014-05-08 · RMI: descarga din amica de clases RMI nos permite descargar clases din amicamente si el cliente o el servidor no tienen todas las

RMI: descarga dinamica de clases

• Por ultimo, hay que generar ficheros de polıticas de seguridadpara que el SecurityManager autorice las acciones del codigodescargado.

• El fichero de polıticas se puede especificar como argumentopara la VM al ejecutar:

-Djava.security.policy=file:/home/q/java/sec.policy