Curso de Sistemas de Informação Tópicos em Sistemas Distribuídos

Propaganda
Curso de Sistemas de Informação
Tópicos em Sistemas Distribuídos
Prof. Giuliano Prado de Morais Giglio
RMI
Remote Method Invocation
RMI – Remote Method Invocation
Modelo de objetos distribuídos
●
●
●
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.
Considerações de projeto
●
Transparência
–
A latência de uma chamada local é bastante 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)
Objetos remotos: objetos que podem receber
invocações remotas.
Modelo de objetos distribuídos
Modelo de objetos distribuídos
●
Invocação de método remoto: invocação de um
método entre objetos localizados em diferentes
processos, estejam estes na mesma máquina ou não.
●
●
●
Comunicação em um sistema de objetos distribuídos:
invocação de método para objetos que estão localizados
em diferentes processos.
Coleta de lixo de objetos remotos: se a linguagem
possuir coleta de lixo para objetos locais, então o mesmo
deve valer para objetos remotos.
Exceções: a invocação remota de um método pode
causar uma exceção levantada pelo método ou devido a
problemas decorrentes da distribuição (e.g. crash de um
objeto, problema no canal de comunicação – timeouts)
Implementação
Implementação
●
Módulo de comunicação
–
responsável pela semântica de invocação (maybe, at least
once, at most once)
Módulo de referência remota
–
●
●
●
marshaling de parâmetros, unmarshaling de resultados
Dispatcher (localizado no servidor)
–
realiza a tradução entre referências de objetos remotos e
locais, e cria referências de objetos remotos
●
Proxy (localizado no cliente)
–
protocolo request-reply
●
●
Implementação
recebe a requisição do módulo de comunicação e chama o
método indicado na mensagem (methodId)
Skeleton (localizado no servidor)
–
unmarshaling dos parâmetros, marshaling dos resultados
Existe um proxy, um dispatcher e um skeleton para
cada classe que representa um objeto remoto!
utiliza uma tabela de objetos remotos
Implementação
Implementação
●
Geração das classes para proxies, dispatchers e skeletons
–
●
Ativação de objetos remotos
–
Objetos passivos
–
utilizados para evitar o desperdício de recursos
a atividade do objeto é por demanda
A ativação consiste em criar um objeto ativo a partir do objeto
passivo criando uma nova instância de sua classe e
inicializando suas variáveis com o estado armazenado
Binder
–
●
●
geradas pelo compilador de interfaces
●
●
serviço que mantém uma tabela contendo os mapeamentos de
nomes textuais para referências de objetos remotos. (e.g.
rmiregistry)
Threads do servidor
–
para cada invocação remota é disparada uma thread no
servidor (concorrência)
Implementação
●
Localização de objetos
–
Java RMI
●
Serviço de localização
●
●
●
auxilia clientes a localizarem os objetos remotos a partir
das suas referências
base de dados para as referências aos objetos remotos aos
possíveis locais onde possam estar (pode ocorrer migração)
se objeto não está no lugar indicado, então utiliza-se uma
mensagem de broadcast para encontrar o objeto
●
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
–
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
public interface MyRemoteClass extends java.rmi.Remote
Exemplo - objeto remoto
Java RMI – IDL (Interface Definition Language)
●
sintaxe e semântica de Java
–
desvantagem: não suporta outras linguagens!
Exemplo - servidor
Exemplo - compilação
●
Compilando a implementação do objeto remoto
●
Geração dos stubs
–
javac CalculatorImpl.java
–
rmic CalculatorImpl
–
gera os arquivos
●
●
CalculatorImpl_Skel.class
CalculatorImpl_Stub.class
Exemplo - cliente
Exemplo - execução
●
Compilando servidor e cliente e executando a aplicação
Java RMI
●
●
Passagem de parâmetros e resultados
●
rmiregistry (Binder)
–
objetos remotos: referência do objeto remoto
–
–
objetos não-remotos: cópia do objeto (classe deve estender a
classe Serializable)
deve ser executado em toda máquina que hospeda objetos
remotos
–
mantém uma tabela para mapeamento da representação
textual dos objetos aos objetos localizados na máquina
–
representação textual
–
acessado pelos métodos da classe Naming
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
Desenvolvimento usando Java RMI
●
Java RMI
Passos
–
Projetar e implementar os componentes da aplicação distribuída
●
●
●
–
Compilação dos códigos-fontes e geração dos stubs
●
●
–
definição das interfaces remotas
implementação dos objetos remotos
implementação do servidor e clientes
geração das classes do servidor e cliente (javac)
criação dos stubs (rmic)
Iniciar a aplicação
●
●
iniciar o binder para guardar os objetos remotos (rmiregistry)
iniciar o servidor e cliente(s)
rmi: //computerName:port/objectName
Download