jpalmeida-pp-2016-01-aula04[rmi] - nemo · 2018. 7. 9. · jpalmeida-pp-2016-01-aula04[rmi].ppt...

5
29/3/16 1 Processamento Paralelo Middleware Orientado a Objetos Prof. João Paulo A. Almeida ([email protected] ) Aplicações distribuídas: interação entre partes Rede B Rede C Rede A Sistema operacional é a única infraestrutura para interação Operating System Applications Middleware é adicionado Applications Middleware layers Request reply protocol External data representation Operating System RMI Camadas da arquitetura Applications, services Computer & Plat Mi ddleware kernel, aries & vers network hardware OS1 Computer & network hardware Node 1 Node 2 Proc esses, threads, communic ation, ... OS2 Proc esses, threads, communic ation, ... Fonte: Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Pearson Education 2005 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Pearson Education 2005 (c) RPC/RMI (between computers) User 1 User 2 Thread 1 Network Thread 2 Kernel 2 Kernel 1

Upload: others

Post on 10-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: jpalmeida-pp-2016-01-aula04[rmi] - Nemo · 2018. 7. 9. · jpalmeida-pp-2016-01-aula04[rmi].ppt Author: João Paulo Almeida Created Date: 3/29/2016 2:37:04 PM

29/3/16

1

Processamento Paralelo Middleware Orientado a

Objetos

Prof. João Paulo A. Almeida ([email protected])

Aplicações distribuídas: interação entre partes

Rede B

Rede C Rede A

Sistema operacional é a única infraestrutura para interação

Applications

Request reply protocol

External data representation

Operating System

Applications

Middleware é adicionado

Applications

Middleware layers Request reply protocol

External data representation

Operating System

RMI

Camadas da arquitetura

Applications, services

Computer &

Platform

Mi ddleware

OS: kernel,libraries & servers

network hardware

OS1

Computer & network hardware

Node 1 Node 2

Processes, threads,communication, .. .

OS2Processes, threads,communication, .. .

Fonte: Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Pearson Education 2005 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4

© Pearson Education 2005

(c) RPC/RMI (between computers)

User 1 User 2

Thread 1 Network Thread 2

Kernel 2 Kernel 1

Page 2: jpalmeida-pp-2016-01-aula04[rmi] - Nemo · 2018. 7. 9. · jpalmeida-pp-2016-01-aula04[rmi].ppt Author: João Paulo Almeida Created Date: 3/29/2016 2:37:04 PM

29/3/16

2

Aplicações distribuídas: interação entre partes Middleware Orientado a Objetos •  Sistema distribuído é uma série de objetos

interagindo •  Baseado em protocolo de troca de mensagens

invisível para o programador •  O objetivo é permitir deixar objetos residirem

em qualquer nó da rede para compartilhar recursos

Client - Server

client

Object reference = reference to object interface

server

Interface specified in IDL

op (args) result

Client – Server invocation

ORB

client

proxy

server op (args) result

Java RMI – Remote Method Invocation •  Todos objetos em Java •  Interfaces descritas em Java •  Terminologia:

– Objeto cliente: objeto que invoca objetos remotos – Objeto remoto: objeto que pode ser acessado por

objetos em outros nós (ou outra JVM) – Objeto remoto pode ser cliente de outro

– Cliente: o processo que invoca métodos em objetos remotos

– Servidor: processo que roda o objeto remoto

Conceitos fundamentais •  Separação explícita de interface e

implementação •  Em Java: uso do construto “interface”

•  Uso de referência a objeto remoto •  Esta referência tem que ser encontrada

client object

Object reference = reference to object interface

remote object

Interface specified in Java

op (args) result

Page 3: jpalmeida-pp-2016-01-aula04[rmi] - Nemo · 2018. 7. 9. · jpalmeida-pp-2016-01-aula04[rmi].ppt Author: João Paulo Almeida Created Date: 3/29/2016 2:37:04 PM

29/3/16

3

Distribuição de referência através de registry •  Clientes obtém referências para objetos remotos

através do registry que é um servidor de nomes. – Os objetos tem que conhecer o registry

client object

remote object

registry resolução registro / binding

uso

Exemplo local /* Hello.java */ public class Hello { public String sayHello() {

return "Hello, world!"; } } /* Client.java */ public class Client {

public static void main() { Hello h = new Hello(); System.out.println(h.sayHello()); }

}

Exemplo local c/ interface explícita /* Hello.java */ public interface Hello { String sayHello() } /* Server.java */ public class Server implements Hello { public String sayHello() {

return "Hello, world!"; } } /* Client.java */ public class Client {

public static void main() { Hello h = new Server(); System.out.println(h.sayHello()); }

}

Criação local: quem invoca tem ref p/ obj /* Hello.java */ public interface Hello { String sayHello() } /* Server.java */ public class Server implements Hello { public String sayHello() {

return "Hello, world!"; } } /* Client.java */ public class Client {

public static void main() { Hello h = new Server(); System.out.println(h.sayHello()); }

}

Exemplo: Interface remota (Hello.java) // interface para uso local apenas public interface Hello {

String sayHello(); } // interface que permite uso remoto public interface Hello extends java.rmi.Remote {

String sayHello() throws java.rmi.RemoteException;

}

Page 4: jpalmeida-pp-2016-01-aula04[rmi] - Nemo · 2018. 7. 9. · jpalmeida-pp-2016-01-aula04[rmi].ppt Author: João Paulo Almeida Created Date: 3/29/2016 2:37:04 PM

29/3/16

4

Outro exemplo de interface que permite uso remoto (note os 2 tipos de exceções) public interface BankAccount extends

java.rmi.Remote { public void deposit(float amount) throws java.rmi.RemoteException; public void withdraw(float amount) throws OverdrawnException,

java.rmi.RemoteException; public float getBalance() throws java.rmi.RemoteException;

}

Servidor (Server.java) import java.rmi.*; // … public class Server implements Hello {

public String sayHello() { return "Hello, world!"; }

public static void main(String args[]) { try { Server obj = new Server(); Hello objref = (Hello) UnicastRemoteObject.exportObject(obj,2000); // Bind the remote object in the registry Registry registry = LocateRegistry.getRegistry(); // opcional: host registry.bind("Hello", objref); System.err.println("Server ready"); } catch (Exception e) { System.err.println("Server exception: " + e.toString()); e.printStackTrace(); } } }

Cliente (Client.java) package example.hello; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class Client {

public static void main(String[] args) { String host = (args.length < 1) ? null : args[0]; try { Registry registry = LocateRegistry.getRegistry(host); Hello stub = (Hello) registry.lookup("Hello"); String response = stub.sayHello(); System.out.println("response: " + response); } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); }

} }

Por debaixo dos panos •  Quando o cliente chama sayHello no “stub” do

objeto remoto: – O stub do cliente abre uma conexão com a

máquina onde está rodando o servidor usando a informação no stub e serializa os parâmetros

– O stub do lado do servidor aceita a conexão, envia o chamado ao objeto remoto e serializa o resultado (a string "Hello, world!") que é enviado ao cliente

– O stub do cliente recebe o resultado, deserialza e retorna o resultado para o cliente

Configuração de execução •  For example, on the Solaris(tm) Operating

System: –  rmiregistry &

•  Or, on Windows platforms: –  start rmiregistry

Servidor Cliente

Registry Name binding resolução

uso

java Server java Client 192.168.1.4

192.168.1.4 (port 1099)

192.168.1.3 192.168.1.4

Page 5: jpalmeida-pp-2016-01-aula04[rmi] - Nemo · 2018. 7. 9. · jpalmeida-pp-2016-01-aula04[rmi].ppt Author: João Paulo Almeida Created Date: 3/29/2016 2:37:04 PM

29/3/16

5

Semântica das invocações •  Para o cliente, chamadas a métodos locais são

iguais a chamadas a métodos remotos. Mas: –  chamadas locais: passagem de parâmetros por

referência –  chamadas remotas: passagem por valor se objeto

convencional (copia o objeto) ou por referência se for objeto remoto

•  Classes que são passadas como parâmetro em Java RMI devem implementar java.io.Serializable. Isto permite que a JVM faça a serialização do estado dos objetos de forma que ele possa ser transferido através da rede. –  Mudançasfeitasnoobjetodoladodoservidornãosãorefle6dasdoladodocliente.

http://www.ime.usp.br/~kon/MAC5759/aulas/Aula10.html

Passagem de parâmetros:semântica

Medidas contra falhas

Fault tolerance measures Invocation semantics

Retransmit request message

Duplicate filtering

Re-execute procedure or retransmit reply

No

Yes

Yes

Not applicable

No

Yes

Not applicable

Re-execute procedure

Retransmit reply At-most-once

At-least-once

Maybe

Tutorial •  http://java.sun.com/j2se/1.5.0/docs/guide/rmi/

hello/hello-world.html#1

Leitura p/ discussão •  P.A. Bernstein. Middleware. Communications of

the ACM, Vol. 39, No. 2, February 1996, 86-98. •  Tragam esse texto impresso na próxima aula!