Sei sulla pagina 1di 9

Sumário

PR
UNIVERS IDADE TECNOLÓGICA FEDERAL DO PARANÁ
1. Conceitos Básicos
a. Invocação remota (RPC/RMI)
b. Semântica de invocação remota
c. Invocação remota de métodos (RMI)
COMUNICAÇÃO INTER-PROCESSOS
JAVA RMI e RPC
2. Implementações de RMI/RPC
a. CORBA
Prof. Cesar Augusto Tacla b. JRMI
http://www.dainf.ct.utfpr.edu.br/~tacla c. Referência a objeto remoto
d. Formato da mensagem de REQUEST-REPLY
e. Protocolo REQUEST-REPLY

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 11 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 22

Sumário Sumário

1 1a

CONCEITOS BÁSICOS Invocação remota (RPC/RMI)

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 33 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 44

COMUNICAÇÃO INTERPROCESSOS DISTRIBUÍDOS MIDDLEWARE

Modelos de invocação de operações remotas baseiam-se nos modelos locais: ◊ RMI (JRMI), RPC, CORBA
• Procedural: Chamada de funções ⇒ chamada remota de funções (RPC)  provêm transparência de localização
• OO: Invocação de métodos ⇒ invocação remota de métodos (RMI)
◊ Invocação transparente de procedure/método
odo Processo
 Transparente até certo ponto,
ou mét
r função semântica invocação remota ≠ local
Invoca

Processo APLICAÇÃO
APLICAÇÃODISTRIBUÍDA
DISTRIBUÍDA RMI
sockets MIDDLEWARE
MIDDLEWARE RPC
Invocar função ou método
PROTOCOLOS PROTOCOLOS
CORBA
Processo PROTOCOLOS PROTOCOLOS
Processo SIST.
SIST.OPER.
OPER. SIST.
SIST.OPER.
OPER. PLATAFORMA
HARDWARE
HARDWARE HARDWARE
HARDWARE

Quem garante esta transparência?

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 55 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 66
Sumário SEMÂNTICA DA INVOCAÇÃO REMOTA

◊ Invocações remotas podem falhar!

1b ◊ Opções de tratamento

Retransmitir Filtrar requests Re-executar ou


Request Duplicados retransmitir Exceção OK
Semântica de invocação remota (RPC/RMI)
resp.
UM TIRO NÃO --x-- --x-- 0 ou 1 1
PELO -1 SIM NÃO RE-EXECUTAR 0 ou + 1 ou +
MÁX 1 SIM SIM RETRANSMITIR 0 ou 1 1

A coluna semântica devem ser interpretada do seguinte modo:


Exceção: ao receber um erro, o método invocado foi executado ... vez(es)
pular
OK : ao receber um ok, o método invocado foi executado ... vez(es)

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 77 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 88

SEMÂNTICA DA INVOCAÇÃO REMOTA SEMÂNTICA DA INVOCAÇÃO REMOTA


◊ PELO MENOS UMA (1 ou +)
 Ao receber uma resposta, o invocador sabe que o método remoto foi executado ao
menos uma vez, pois:
◊ UM TIRO
 Ao receber uma resposta, o invocador tem certeza que o método  Falha do canal de comunicação
remoto foi executado somente uma vez  Request chega, servidor executa o método e envia resposta.
 Resposta não chega, request é retransmitido
 Ao receber exceção (resposta não chegou, logo timeout), o  Servidor executa o método e envia resposta, ... até que a resposta chegue! (1 ou +)
invocador não saberá se o método foi executado ou não, pois:

 Ao receber exceção, o invocador não saberá se o método foi executado ou não,


 Falha do servidor pois:
 Request chega, mas servidor cai antes ou durante a execução do
método (0)  Falha do servidor
 Request chega, mas servidor cai antes ou durante a execução do método,
 Request chega, servidor executa o método e falha em seguida (1) retransmissões do request, ..., exceção! (0)
 Request chega, servidor executa o método e falha em seguida, retransmissões do
request, ..., exceção! (1)
 Falha no canal de comunicação
 Request não chega no servidor (0)  Falha no canal de comunicação
 Request não chega no servidor, retransmissões do request, ..., exceção! (0)
 Resposta não chega: servidor executa o método, envia resposta,
 Resposta não chega: servidor executa o método, envia resposta, mas resposta não
mas resposta não chega no cliente ou chega depois do timeout (1) chega no cliente, retransmissão do request, servidor executa método, envia resposta,
mas resposta não chega ... exceção! (1 ou +)

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 99 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 10
10

SEMÂNTICA DA INVOCAÇÃO REMOTA Sumário

◊ NO MÁXIMO UMA (0 ou 1)
 Ao receber uma resposta, o invocador sabe que o método foi executado
uma só vez, pois:

 Falha do canal de comunicação 1c


 Request chega no servidor
 Servidor executa o método
 Servidor envia resposta.
 Resposta não chega... Remote Method Invocation (RMI)
 Retransmissão do request
 Servidor detecta que o request já foi executado e retorna a resposta com
resultado anterior
 Se a resposta chegar no cliente
 Método terá sido executado uma só vez
 Se não
 Após um certo número de retransmissões, uma exceção será gerada

 Ao receber exceção, o invocador sabe que o método não foi executado ou


foi executado somente uma vez
 Semântica utilizada em JRMI e CORBA

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 11


11 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 12
12
REMOTE METHOD INVOCATION: RMI INTERFACE REMOTA
Objeto
objeto
remoto

local C
Invocação
remota local E
F A B
B remote
A local
dados Invocação
D dados
dados
remota
métodos
métodos
(Coulouris et al., 2001)
Método 1
B
aa Método 2
◊ Invocação remota de métodos = RMI ot Método 3
m
re
◊ Objeto remoto: pode ser invocado a distância (ex. B) c ia
ên
f er
Re
Interface remota de B

separação entre interface e implementação

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 13


13 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 14
14

EXEMPLO DE DECLARAÇÃO INTERFACE LIMITES DA INTERFACE REMOTA

◊ IDL (CORBA)
 c-like
module banco { ◊ Limites de uma interface
enum TipoConta{ (em relação ao processamento local)
CORRENTE,
POUPANCA
};
 Não permite acessar diretamente variáveis de outros módulos

struct Conta { tipos


string id;
 Não é possível fazer passagem de argumentos por referência
Método 1
string senha;  para modificar os argumentos na origem
Método 2
TipoConta tc;
Método 3
};
 Ponteiros não podem ser utilizados como argumentos de chamadas
interface Operacao {
Interface remota de B long getSaldo(in Conta conta);
void retirar(in Conta conta, in long valor);
void depositar(in Conta conta, in long valor);
void transferir(in Conta orig, in Conta dest, in long valor);
};
};

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 15


15 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 16
16

TRANSPARÊNCIA TRANSPARÊNCIA DA API

◊ As implementações de RMI preocupam-se:


 Com os limites das interfaces
 Com a semântica das invocações Há autores que dizem que a sintaxe das invocações remotas deve
ser distinta das invocações locais para expressar claramente suas
 Com a transparência das invocações diferenças ao programador.
 Fazê-las similares às invocações locais: sintaticamente e
semanticamente (difícil!) O programador de uma aplicação distribuída deve levar em conta:
• falhas de comunicação,
 Semântica: • indisponibilidade do serviço e, também,
 Da invocação local: exatamente uma vez • ter consciência que os métodos de um objeto remoto podem ser
 Da invocação remota: várias possibilidades acessados de forma concorrente levando aos problemas de race
condition e falta de vivacidade.
 Tempo de execução de uma invocação remota é maior
 A gama de exceções também é maior: falhas de comunicação,
do servidor e problemas de concorrência!

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 17


17 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 18
18
Sumário Sumário

2 2a

IMPLEMENTAÇÕES DE RMI/RPC CORBA

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 19


19 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 20
20

CORBA CORBA

◊ CORBA ◊ CORBA (OMG: http://www.omg.org)


 OMG: Object Management Group
 http://www.omg.org
 CORBA = Common Object Request Broker Architecture
◊ Invocações remotas
CORBA é uma especificação (OMG) de um padrão para um ambiente
heterogêneo de computação orientado a objetos distribuídos. ◊ Heterogeneidade
 Programas escritos em linguagens e/ou paradigmas diferentes
Parte desta especificação define a IDL, Interface Definition
Language. Toda implementação CORBA padrão deve suportar IDL, ou  orientado a objetos ou procedurais
seja, implementar todas as capacidades definidas na IDL utilizando  C, Java, C++
uma linguagem e uma plataforma específicas.
 Processos rodam em plataformas diferentes

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 21


21 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 22
22

FUNCIONAMENTO CORBA Sumário

Interface IDL

<<realizes>> 2b
<<realizes>> <<realizes>>

CLIENTE SERVIDOR

JRMI
STUB SKELETON
IIOP
ORB ORB
request
(un)marshall (un)marshall

Internet Inter-ORB Protocol

IIOP: Internet Inter-ORB Protocol


ORB=Object Request Broker

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 23


23 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 24
24
JRMI SUPORTE PARA JRMI

◊ JRMI: Java Remote Method Invocation ◊ Pacote java.rmi


 API para implementação de objetos clientes, servidores e
◊ objetos distribuídos em Java interfaces
 API para utilizar os serviços de runtime
◊ Transparência
 Utiliza mesma sintaxe da invocação local ◊ Serviços de runtime
 Verificação de tipos de dados é idêntica a local  Registro de objetos remotos (permite localizá-los)
 Não há necessidade de aprender uma IDL específica (como em CORBA)
 Faz garbage collection distribuído
◊ Ferramentas
◊ Porém...  JRMI: Primeira aparição: JDK 1.1
 Há consciência (da parte do programador) que a invocação é de um  Até JDK 1.4: compilador rmic para gerar stubs
método remoto, pois ele deve:  Após: Stubs podem ser gerados automaticamente pela JVM (a partir
 tratar RemoteExceptions de JDK 1.5)
 implementar a interface Remote

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 25


25 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 26
26

IMPLEMENTAÇÃO RMI MENSAGEM REQUEST-REPLY

A: CLIENTE
◊ Mensagem de invocação requer referência ao objeto
B1: SERV
dados B2: SERV remoto
A tem referência de B1
métodos dados
dados
métodos
Interface métodos Tipo de mensagem Int (0=request 1=reply)
remota
return Id do request int
da classe B
return invoca Referência ao obj. remoto Ver adiante
Id do método Int ou método
Skeleton &
STUB B1 argumentos
Invoca b1.met() Dispatcher para Bytes (marshalled)
a classe de B
Stub monta request
(marshall)
Mapeia ref.
request reply reply request remota<->local

Módulo de Módulo de Módulo de Módulo de


referência comunicação comunicação referência

Request/reply Request/reply
JRMP
Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 27
27 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 28
28

REFERÊNCIA A OBJETO REMOTO MÓDULO DE REFERÊNCIA A OBJ REMOTO

◊ Quando é utilizada: ◊ Dois tipos de entrada na


 Quando um objeto invoca um método de um objeto remoto tabela:
 Uma entrada para cada objeto
 Referências também podem ser passadas como argumentos ou remoto do processo
como respostas de métodos remotos
 Uma entrada para cada stub
◊ Referência única no sistema distribuído local:
Ex. no lado do cliente Ex. no lado do servidor
 No espaço de nomes
 No tempo (referências antigas) <ref. remota de B1>, <ref.
<ref. remota de B1>, <ref.
local de B1> ⇒ referência local de B1>
local se refere a um stub <ref. remota de B2>, <ref.
32 bits 32 bits 32 bits 32 bits
local de B2>

IP porta Hora e Número Interface


data de seqüencial
criação

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 29


29 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 30
30
BINDER FUNCIONAMENTO TÍPICO

◊ Cenário
 Objeto A necessita de um serviço de B, mas não conhece a
REGISTRO
referência remota, somente o nome de B ta
re mo
 O objeto A pergunta a quem? m ref.
bté
2. O
1. registra objetos
3. Comunica-se direto
CLIENTE
com o obj. servidor

SERVIDOR

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 31


31 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 32
32

Funcionamento típico EXEMPLO HELLO WORLD

A:Cliente rmiregistry:Binder B:Servidor

Locate rmiregistry
Cria stub DEFINIÇÃO DA INTERFACE DO SERVIÇO
locate rmiregistry
rebind(“Alo”, stub )
Lookup(“Alo”) import java.rmi.Remote;
import java.rmi.RemoteException;
stub

public interface AloInt extends Remote {


stub.digaAlo() String digaAlo() throws RemoteException;
}
Executa o
método
"Alo, mundo!"

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 33


33 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 34
34

EXEMPLO HELLO WORLD EXEMPLO HELLO WORLD


IMPLEMENTAÇÃO DO SERVIÇO
IMPLEMENTAÇÃO DO CLIENTE
public class AloImpl implements AloInt {
public String digaAlo() { public class AloCli {
return "Alo, mundo!"; public static void main(String[] args) {
}
// se host = null, pega o host local no getRegistry
public static void main(String args[]) { String host = (args.length < 1) ? null : args[0];
try { try {
AloImpl alo = new AloImpl(); // localiza o registro
// Exporta o objeto remoto colocando-o em listening para receber Registry registry = LocateRegistry.getRegistry(host);
// request numa porta anonima TCP - retorna o stub do objeto servidor
AloInt aloStub = (AloInt)UnicastRemoteObject.exportObject(alo, 0); // localiza o serviço registrado como Alo
// Tenta localizar o rmiregistry no host local e na porta default (1099)
AloInt stub = (AloInt) registry.lookup("Alo");
// Caso nao encontre, retorna erro: RemoteException
Registry registro = LocateRegistry.getRegistry(); // faz invocacao remota do digaAlo()
String resposta = stub.digaAlo();
// Registra o OBJ servidor: nome "Alo" e interface aloStub System.out.println("* Resposta: " + resposta);
// Se “Alo” ja estiver associado a outro objeto remoto, ocorre uma excecao } catch (Exception e) {
registro.rebind("Alo", aloStub); System.err.println("! Erro no cliente: " + e.toString());
} catch (Exception e) {
System.out.println("! Erro no servidor: " + e.getMessage());
e.printStackTrace();
} }
} }
} }

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 35


35 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 36
36
EXERCÍCIO 1: Hello em JRMI EXERCÍCIO 1: Hello em JRMI

◊ Visitar http://www.dainf.ct.utfpr.edu.br/~tacla/JAVARepositorio/JRMI/JRMIHello2/ ◊ PASSO 1: DOWNLOAD


◊ Observar no diretório build só há arquivos .class 1. Crie um projeto NetBeans num diretório <home> qualquer
 AloImpl: servidor 2. Faça o download dos arquivos .java em <home>/src/
 AloInt: interface remota
3. Compile o projeto
 AloCli: cliente que utiliza o serviço

(é possível baixar todo o projeto, inclusive os .class. Neste caso


 O stub e skeleton são automaticamente gerados em tempo de execução
não é necessário recompilar)

◊ Passo 1: Download e compilação


1. Crie um projeto NetBeans num diretório <home> qualquer
2. Faça o download dos arquivos .java em <home>/src/
3. Compile o projeto

(é possível baixar todo o projeto, inclusive os .class. Neste caso não é


necessário recompilar)

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 37


37 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 38
38

EXERCÍCIO 1: Hello em JRMI EXERCÍCIO 1: Hello em JRMI

◊ PASSO 2: RODAR O RMIREGISTRY ◊ Para setar o classpath do faça:


 Incluir o diretório <home>/build/classes/ no classpath (ver slide
seguinte)
 Executar o command prompt e nele fazer start (2x)  Linux
 Executar o rmiregistry a partir de qualquer ponto da árvore de  echo $CLASSPATH (verifica classpath atual)
diretórios  export CLASSPATH=$CLASSPATH:<home>/build/classes/

◊ Observações  Windows
 Isto é necessário, pois o rmiregistry precisa saber onde encontrar os  set classpath (verifica classpath atual)
arquivos .class  set classpath=%classpath%;<home>/build/classes/
 RMI REGISTRY é um serviço TCP que aguarda solicitações na porta
bem conhecida 1099

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 39


39 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 40
40

EXERCÍCIO 1: Hello em JRMI EXERCÍCIO 2: CALCULADORA

◊ PASSO 3: EXECUTAR ◊ Utilizando o JRMIHello2 como exemplo faça um serviço


remoto que implemente a seguinte interface:
◊ Executar AloImpl (servidor)  double Somar(double a, double b) retorna a + b
 Em um dos command prompt aberto pelo start  double Subtrair(double a, double b) retorna a – b
 Posicionar-se no <home>/build/classes/  double dividir(double a, double b) retorna a/b
 Executar java AloImpl  Double multi(double a, double b) retorn a*b

◊ Executar AloCli (cliente) ◊ Faça um cliente que:


 Em um dos command prompt aberto pelo start
 Localize o serviço no registro
 Posicionar-se em <home>/build/classes/
 Invoque os quatro métodos acima
 Executar java AloCli <ip rmiRegistry>
 O argumento é a localização do RMI Registry. Não precisa ser
colocado se estiver rodando na mesma máquina

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 41


41 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 42
42
PRÁTICA: QUADRO BRANCO PRÁTICA: QUADRO BRANCO

◊ PASSO 1: EXECUTAR ◊ PASSO 3: OBSERVAR OS PONTOS ABAIXO


 BAIXAR O CÓDIGO DE
http://www.dainf.ct.utfpr.edu.br/~tacla/JAVARepositorio/JRMI/JRMIQuadroBranco/  Os objetos que são passados por valor (ObjetoGrafico) devem ser
serializáveis (equivale ao marshalling no Java)
 Editor gráfico estilo quadro branco compartilhado por vários usuários
(Coulouris, 2001). A implementação não possui interface gráfica, porém
tem todo o esqueleto!  Download de classes pela JVM
 Quando um cliente recebe uma resposta contendo um objeto
 Ao executar o cliente, o usuário pode fazer passado por valor
 java Cliente escrever para “desenhar” um retângulo
 Quando uma referência remota aponta para um proxy que não
 java Cliente ler para ler todas as formas desenhadas
existe localmente
 java Cliente ler <n> para ler todas as formas desenhadas a partir
da versão n (n é um inteiro)
 Dinamicidade
 O servidor mantém o estado do desenho:  Mudar o código do ObjetoGráfico e mostrar que funciona
 Cliente pode buscar formas desenhadas fazendo polling no servidor
 O servidor guarda um número de versão junto com cada forma (evita
que um cliente recupere formas já recuperadas)

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 43


43 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 44
44

EXERCÍCIO 3 EXERCÍCIO 4

◊ Implementar uma interface gráfica nos clientes do ◊ Implementar o avaliador de respostas de questionários
quadro branco (vide slides anteriores) de maneira que (o mesmo feito em UDP e TCP) com JRMI
todos possam editar um desenho de forma cooperativa.

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 45


45 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 46
46

RESUMO DE RMI

◊ RMI
 Cada objeto do SD tem uma referência remota e uma interface
remota que especifica quais operações podem ser invocadas
remotamente.

 Invocações de métodos locais possuem semântica de execução RPC


“exatamente uma vez”

 RMI somente garante “no máximo uma vez”


Remote Procedure Call
 Os componentes do middleware components (proxies, skeletons e
dispatchers) escondem do programador os detalhes de marshalling,
envio de mensagens e localização dos objetos.

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 47


47 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 48
48
RPC IMPLEMENTAÇÃO RPC

◊ Remote Procedure Call A: CLIENTE


 Chamada de procedures remotas
programa Procedure Procedure
1 2
◊ Similar à RMI
◊ Permite cadeia de invocações return invoca

return SKELETON
◊ Uma implementação de RPC também implementa uma PROXY
STUB PROC 1. STUP PROC 2
ou mais semânticas de invocação Invoca procedure 1 STUB PROC 1
 Talvez DISPATCHER
 Pelo menos uma
 No máximo uma request reply reply request

◊ Mais simples que RMI Módulo de Módulo de


comunicação comunicação
 não tem o módulo de referência a objeto remoto
Request/reply Request/reply

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 49


49 Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 50
50

CONCLUSÃO

◊ CORBA x JRMI
 Use Corba se o sistema distribuído tiver programas escritos em
linguagens ou paradigmas diferentes
 Use Corba se futuramente o sistema interoperar com outros
sistemas escritos em linguagens ou paradigmas diferentes
 Se tudo for e será Java, use JRMI

◊ Java oferece várias formas de realizar distribuição


 Sockets: menor abstração, mensagens ou stream
 CORBA: abstração invocação
 JRMI: abstração maior, objetos

Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla 51


51

Potrebbero piacerti anche