Sistemas Distribuídos
Prof. Marcus Rodrigues
[email protected]
Comunicação em
Sistemas Distribuídos
Capítulo 2 – Aula 8
Comunicação em Sistemas
Distribuídos
Prof. Marcus Rodrigues

Material baseado no
livro
Distributed Systems:
Principles and Paradigms
Prentice Hall
Copyright © Andrew S.
Tanembaum, Maarten van
Steen, 2001
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Invocação de Método Remoto

Uso de vantagens do paradigma de
orientação à objetos em comunicação
distribuída
Prof. Marcus Rodrigues
• Encapsulamento!


RPC aplicada a objetos
Invocação de Método Remoto (RMI –
Remote Method Invocation)
• Invocação de um método entre objetos
localizados em diferentes processos, estejam
estes na mesma máquina ou não.
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Objetos Distribuídos (1)


Prof. Marcus Rodrigues

Estado
Método
... e Interface
• Um objeto pode implementar múltiplas
interfaces. Da mesma forma que, dada uma
definição de interface, podem haver vários
objetos que oferecem uma implementação para
essa interface.
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Objetos Distribuídos (2)
Prof. Marcus Rodrigues
2-16
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Objetos Distribuídos (3)

“O estado de objetos distribuído não é
distribuído”
Prof. Marcus Rodrigues
• Apenas as interfaces implementadas pelo objeto
•


são disponibilizadas em outras máquinas
Objetos remotos
Objetos persistentes
x
Objetos transientes
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Associando um cliente a um
objeto (1)
Prof. Marcus Rodrigues

Referência a objeto remoto
•
•
•
•
outros objetos podem invocar métodos de um objeto
remoto somente se tiverem acesso a sua referência de
objeto remoto
identificador único do objeto no sistema
pode ser utilizado como parâmetro ou resultado de uma
invocação de método remoto
Interface remota:
• todo objeto remoto possui uma interface remota que
•

especifica qual dos métodos pode ser invocado
remotamente
implementada pela classe do objeto remoto.
Associação de objetos (binding)
•
•
Binding implícito
Binding explícito
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Associando um cliente a um
objeto (2)
Distr_object* obj_ref;
obj_ref = …;
obj_ref-> do_something();
//Declare a systemwide object reference
// Initialize the reference to a distributed object
// Implicitly bind and invoke a method
Prof. Marcus Rodrigues
(a)
Distr_object objPref;
Local_object* obj_ptr;
obj_ref = …;
obj_ptr = bind(obj_ref);
obj_ptr -> do_something();
//Declare a systemwide object reference
//Declare a pointer to local objects
//Initialize the reference to a distributed object
//Explicitly bind and obtain a pointer to the local proxy
//Invoke a method on the local proxy
(b)
a)
b)
Um exemplo com binding implícito usando apenas referência
global
Um exemplo com binding explícito usando referências locais
e globais
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Invocação estática x
Invocação dinâmica (1)

Prof. Marcus Rodrigues

RMI x RPC?
•
Referência de objeto
Suporte a RMI
•
•
Invocação estática
• Uso de linguagens de definição de interfaces (IDL) para
especificação da interface do objeto
Invocação dinâmica
• Geração automática do stub usando alguma linguagem
•
•
orientada a objetos
A invocação do método é composta em tempo de execução
A aplicação seleciona em tempo de execução qual o
método será invocado no objeto remoto
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Invocação estática x
Invocação dinâmica (2)

Suporte a RMI
•
Invocação dinâmica x Invocação estática
• Exemplo:
Prof. Marcus Rodrigues
invoke(objeto, metodo,
parametros_de_entrada,
parametros_de_saida);

append(int)
Atributos:
...
...
Invocação estática
fobject.append(int);

Invocação dinâmica
invoke(fobject, id(append), int);
fobject
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Passagem de parâmetros
Prof. Marcus Rodrigues
2-18

Passando um objeto por referência ou por valor
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Considerações de projeto

Transparência
• A latência de uma chamada local é bastante
Prof. Marcus Rodrigues
•
•
menor que de uma chamada remota.
Chamadas remotas são mais vulneráveis a
falhas do que chamadas locais.
As invocações de métodos remotos são iguais
as invocações aos métodos locais, porém as
diferenças entre os objetos remotos e locais
devem estar expressos nas suas interfaces.
(e.g. as classes de objetos remotos em Java
implementam a interface Remote)
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Modelo de objetos distribuídos
DCE
a)
Prof. Marcus Rodrigues
b)
Objetos dinâmicos distribuídos no DCE
Objetos nomeados distribuídos
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Java RMI

Prof. Marcus Rodrigues

Utiliza mesma sintaxe para invocação de
métodos de objetos locais ou remotos
Todo objeto remoto implementa uma
interface remota:
• extende a interface java.rmi.Remote
public interface MyRemoteClass extends java.rmi.Remote
• todos os métodos da interface devem prever a
exceção java.rmi.RemoteException (cláusula
throws) além das exceções próprias da
aplicação
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Java RMI – IDL
sintaxe e semântica de Java
• desvantagem: não suporta outras linguagens!
Prof. Marcus Rodrigues

Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Prof. Marcus Rodrigues
Exemplo - objeto remoto
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Exemplo - compilação

Compilando a implementação do objeto
remoto
• javac CalculatorImpl.java
Prof. Marcus Rodrigues

Geração dos stubs
• rmic CalculatorImpl
• gera os arquivos
• CalculatorImpl_Skel.class
• CalculatorImpl_Stub.class
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Prof. Marcus Rodrigues
Exemplo - servidor
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Prof. Marcus Rodrigues
Exemplo - cliente
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Exemplo - execução
Compilando servidor e cliente e
executando a aplicação
Prof. Marcus Rodrigues

Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Java RMI

Passagem de parâmetros e resultados
• objetos remotos: referência do objeto remoto
• objetos não-remotos: cópia do objeto (classe
deve estender a classe Serializable)
Prof. Marcus Rodrigues

Carga de classes
• carregamento automático de classes de objetos
•
•
desconhecidos na JVM
flexibilidade (e.g. extensão de funcionalidades
de um módulo)
servidor deve criar RMISecurityManager para
segurança
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Java RMI

rmiregistry (Binder)
• deve ser executado em toda máquina que
Prof. Marcus Rodrigues
•
•
hospeda objetos remotos
mantém uma tabela para mapeamento da
representação textual dos objetos aos objetos
localizados na máquina
representação textual
rmi: //computerName:port/objectName
• acessado pelos métodos da classe Naming
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Desenvolvimento usando Java
RMI
Prof. Marcus Rodrigues

Passos
•
Projetar e implementar os componentes da aplicação
distribuída
• definição das interfaces remotas
• implementação dos objetos remotos
• implementação do servidor e clientes
•
Compilação dos códigos-fontes e geração dos stubs
•
Iniciar a aplicação
• geração das classes do servidor e cliente (javac)
• criação dos stubs (rmic)
• iniciar o binder para guardar os objetos remotos
•
(rmiregistry)
iniciar o servidor e cliente(s)
Sistemas Distribuídos – Capítulo 2 – Invocação de Método Remoto
Download

Sistemas Distribuídos