3. Objetos Distribuídos e Invocação Remota
3.1 Comunicação entre Objetos Distribuídos
O modelo de objetos
Objetos possuem conjuntos de dados e conjuntos de métodos;
Interagem entre si por invocação de métodos;
Um objeto acessa outros através de uma referência;
Interface define métodos, argumentos, retorno e exceções;
o Objeto implementa os métodos da interface;
o Uma interface pode ser implementada por vários objetos;
o Interfaces não possuem construtores;
Ações:
o É iniciada pela invocação de um método;
o Destino executa e retorna resultado;
o Ação pode alterar o estado do destino;
o Invocação pode gerar outras invocações;
o Ação é uma série de invocações encadeadas;
Exceções:
o Programa pode gerar condições não esperadas;
o Erro Socket, arquivo, etc;
o Métodos geram exceções;
o Melhora identificação dos erros;
o Pode ser tratada ou passada para outro método;
Coleta de Lixo: é necessário liberar espaço ocupado pelos objetos;
o Java: detecta objetos não referenciados;
o Se não detecta, usuário deve fazer;
Objetos distribuídos
Os objetos de um sistema estão separados;
o Diferentes processos ou computadores;
Objetos clientes invocam métodos de objetos servidores;
Se comunicam por RMI;
Objetos servidores podem ser clientes de outros objetos;
o Arquitetura de três camadas;
Outras arquiteturas: replicação, mobilidade;
Objetos somente são acessados por métodos;
o Controle de segurança;
o Controle de concorrência;
o Suporte a heterogeneidade;
O modelo de objetos distribuídos
Objetos remotos aceitam chamadas remotas;
Para realizar uma invocação é necessária uma referência ao objeto
remoto;
local
C
local E
invocation
invocation
remote
invocation
B
A
local
invocation
remote
invocation
F
D
Um objeto remoto possui uma interface remota;
o Especifica os métodos remotos;
Referência a Objetos Remotos:
o São passadas como parâmetro em RMI;
o Identificam o objeto no sistema distribuído;
32 bits
32 bits
Internet address
port number
32 bits
time
32 bits
object number
interface of
remote object
Interface Remota:
o Apenas métodos da interface remota podem ser acessados
remotamente;
remote object
remote
interface
{
Data
m1
m2
m3
implementation
of methods
m4
m5
m6
CORBA: interface remota definida em CORBA IDL;
o Independente de linguagem;
Java RMI: interface remota definida como interface Java;
o Objeto remoto deve implementar interface Remote;
o Um objeto pode implementar várias interfaces;
Ações distribuídas:
o Irá envolver diferentes computadores;
o Referência remota precisa estar disponível;
Coleta de lixo distribuída:
o É uma invocação de coleta local com invocações remotas;
Exceções:
o Processo pode falhar durante uma invocação;
o Usa timeouts;
o CORBA IDL prove definição de exceções;
Aspectos de projeto para RMI
Protocolo Request-Reply pode garantir funcionamento com:
o Retransmissão de request;
o Filtro de duplicatas;
o Retransmissão de resultados com histórico;
A combinação destes mecanismos produz as semânticas RMI;
Fault tolerance measures
Retransmit request
message
Invocation
semantics
Re-execute procedure
or retransmit reply
No
Duplicate
filterin
g
Not applicable
Yes
No
Re-execute procedure
At-least-once
Yes
Yes
Retransmit reply
At-most-once
Not applicable
Maybe:
o Não sabe se foi executado 1 ou 0 vezes;
o Falha pode ocorrer antes ou depois da execução;
Maybe
At-least-once:
o Se receber resposta, o método foi executado ao menos uma vez;
o Retransmite requisições;
o O método pode ser executado mais de uma vez;
o Para operações idempotentes;
At-most-once:
o Se receber resposta, o método foi executado exatamente uma vez;
o Se vier erro o método executou 0 ou 1 vez;
o Para operações não idempotentes;
Semânticas:
o CORBA e Java RMI: at-most-once;
o CORBA: maybe;
o Sun RPC: at-least-once;
Transparência:
o RPC original não faz distinção de chamada local e remota;
o Marshall e comunicação são escondidos da aplicação;
o Retransmissão transparente;
o Estas características estão no RMI;
o RPC e RMI enfrentam problemas de rede;
o Problemas de rede não são transparentes;
o Latência da rede também não é transparente;
Implementação RMI
Cenário da invocação remota de métodos:
server
client
object A proxy for B
skeleton
& dispatcher
for B’s class
Request
remote
object B
Reply
Communication
Remote
reference module
module
Communication
module
Remote reference
module
Módulo de Comunicação:
o Executa protocolo Request-Reply;
o
o
o
o
Usa message type, methodId e objectReference;
Define semântica;
Seleciona o dispatcher do Objeto;
Passa uma referência local a partir da remota;
Módulo de Referência Remota:
o Cria os objetos remotos na primeira vez que são acessados;
o Contém uma tabela de referências remotas;
o Uma entrada para cada objeto remoto e cada Proxy;
o Converte referência do Request ou Reply em referência local a
um Proxy ou objeto remoto;
o É chamado pelo RMI durante o Marshall;
RMI Proxy:
o Prove transparência ao cliente;
o Faz Marshall e unMarshall;
o Chama Send e Receive;
o Um para cada objeto remoto;
RMI Dispatcher:
o Um para cada objeto remoto;
o Recebe a requisição do módulo de comunicação;
o MethodId escolhe o método correto;
o Chama método do Skeleton;
RMI Skeleton:
o Faz unMarshall e chama o método do objeto remoto;
o Aguarda resultado da execução;
o Faz Marshall para o Reply;
o Send para o Proxy;
Geração Proxy, Dispatcher e Skeleton:
o São gerados por um compilador de interface;
o Orbix compila CORBA IDL para C;
o Java RMI compila interface Java;
Programa Servidor:
o Contém dispatcher, Skeleton e a implementação;
o Inicialização: rotina principal para criação dos primeiros objetos;
o Outros objetos são criados a partir dos iniciais;
o Inicialização é registrada no binder;
Programa Cliente:
o Contém os proxies;
o Interfaces não têm construtores;
o Métodos Factory: método que cria objetos;
o
Binder:
o Mapeia as referências dos objetos remotos;
o Cliente obtém referência a um objeto pelo binder;
o Objeto remoto registra seus serviços no binder;
o CORBA: NamingService;
o Java: RMIregistry;
Ativação:
o Objetos remotos não precisam estar sempre na memória;
o Podem ser ativados sob demanda por outro processo;
o Objeto Ativo: pronto para receber invocação;
o Objeto Passivo: pronto para ser ativado;
Ativador:
o Cria um objeto ativo a partir de um passivo;
o Cria instância e inicializa variáveis com valor armazenado;
o Registra objetos passivos;
o Ativa objetos sob demanda;
o Ativação é transparente;
Persistência:
o Objeto que pode ser ativado é chamado de Persistente;
o Pode ser armazenado em um formato comum;
o São gerenciados por Objetos de Gerência de Persistência;
Objeto é persistente quando:
o É referenciado por outro objeto persistente;
o Deriva de classe que implementa persistência;
Localização de Objetos:
o Referência possui IP e Porta da localização do objeto;
o Desta forma o objeto não pode mudar de local;
o Um objeto pode estar em diferentes locais;
o Neste caso, a referência não pode conter o endereço do objeto;
o Cliente invoca com referência do objeto, porém outro endereço;
o O serviço de localização encontra o objeto;
o Contém uma tabela com a localização dos objetos;
o Usa cache e broadcast para localização;
Coleta de lixo distribuída
Baseado em contagem de referência;
Quando o proxy é criado uma referência é adicionada;
Quando o proxy é fechado o servidor é avisado;
Trabalha em conjunto com a coleta local;
o Ex: addRef(B) e removeRef(B);
addRef e removeRef são idempotentes;
Suporta falhas do cliente:
o Armazena referências por períodos de tempo;
o Cliente é responsável por pedir novo período;
o Tempo começa no addRef;
o Termina quando expirar ou no removeRef;