Sistemas Distribuídos
ComunicaçãoObjetos Distribuídos e RMI
- Parte 2 -
Instituto de Informática – UFG
Verão 2005
Baseado em: Tanenbaum, Capítulo 2
Chamadas de Objetos:Chamadas Remotas e Chamadas Locais
invocation invocationremote
invocationremote
locallocal
local
invocation
invocationA B
C
D
E
F
Um Objeto Remoto e sua Interface Remota
interfaceremote
m1m2m3
m4m5m6
Data
implementation
remoteobject
{ of methods
Objetos Distribuídos
Organização típica de um sistema de objetos distribuídosbaseado em proxy e skeleton.
Operação de binding: cliente obtém um proxy para o objeto remoto.
2-16
Conceitos de Implementação
• Objeto de linguagem
• Objeto remoto
• Adaptador de objeto
• Servidor
Máquina
Processo servidor
Objetosremotos
Objetos delinguagem:
instâncias de classes que
implementam os objetos remotos
Máquina
Cliente
Adaptador de Objeto
Binding de um Cliente com um Objeto
a) Exemplo de binding implícito – utiliza apenas referências globais.b) Exemplo de binding explícito – utiliza referências globais e locais.
Distr_object* obj_ref; //Declare a systemwide object referenceobj_ref = …; // Initialize the reference to a distributed objectobj_ref-> do_something(); // Implicitly bind and invoke a method
(a)
Distr_object objPref; //Declare a systemwide object referenceLocal_object* obj_ptr; //Declare a pointer to local objectsobj_ref = …; //Initialize the reference to a distributed objectobj_ptr = bind(obj_ref); //Explicitly bind and obtain a pointer to the local proxyobj_ptr -> do_something(); //Invoke a method on the local proxy
(b)
Referências de Objetos
• Permitem a um cliente referenciar e interagir com objetos remotos de maneira transparente
• Exemplo de implementação:
• Podem ser tratados como ponteiros ou referências locais na implementação do cliente
– na verdade, um ponteiro ou referência local para o proxy!
Internet address port number time object number interface of remote object
32 bits 32 bits 32 bits 32 bits
Protocolo entre Cliente e Servidor
Request
ServerClient
doOperation
(wait)
(continuation)
Replymessage
getRequest
execute
method
messageselect object
sendReply
Formato Geral das Mensagens
O mesmo formato geral é utilizado tanto para requisições quanto para respostas.
messageType
requestId
objectReference
methodId
arguments
int (0=Request, 1= Reply)
int
RemoteObjectRef
int or Method
array of bytes
Passagem de Parâmetros em RMI
Diferença entre passagem por referência e passagem por valor.
Há várias formas de se determinar o tipo de passagem a ser usado
(e.g., em Java, objetos do tipo Remote são sempre passados por ref.)
2-18
Um Modelo para Implementação de RMI
(Compare com o modelo de implementação de RPC.)
object A object BRequest
proxy for B
Reply
CommunicationRemote Remote referenceCommunication
module modulereference module module
remoteclient server
skeletonfor B’sclassdi
spat
cher
RMI Estática vs. RMI Dinâmica
• Chamada estática de métodos remotos– a interface do objeto remoto é compilada para gerar um proxy
específico– o cliente é programado para utilizar o proxy– Ex.: result = object1.method1(param1, param2);
• Chamada dinâmica de métodos remotos– a chamada é construída em tempo de execução– o cliente pode ser genérico
• independente de quais interfaces utilizará• pode descobrir as interfaces em tempo de execução
– o proxy (stub cliente) é genérico– Ex.: invoke(object, method, input_params, output_params)
Semântica de Chamadas Remotas
• At-most-once– a chamada é executada (no servidor) 0 ou 1 vez
• At-least-once– a chamada é executada pelo menos uma vez
• mas pode ser executada várias vezes
• Best-effort– a chamada pode ou não ser executada
• i.e., 0 ou mais vezes
• Exactly once– a chamada é sempre executada uma e somente uma vez
Modelos de Objetos Distribuídos
Atualmente, cada sistema de middleware adota um modelo de objetos distribuídos particular.
Mas alguns conceitos são comuns.
No futuro, sistemas de middleware tenderão a ser independentes de modelo.
Mas, por enquanto, precisamos de algum modelo de objetos canônico, definido em conjunto com o middleware
• representativo de qualquer modelo de objetos distribuído conhecido• veja a seguir...
Conceitos Utilizados na Definição de um Modelo de Objetos Distribuídos
• Interfaces• Tipos
• Classes• Templates
• Modelos de Interação
• Definições no Modelo de Referência para Processamento Distribuído Aberto da ISO
ISO RM-ODP
Características de Objetos
Interfaces– Objetos podem interagir apenas através de interfaces
bem definidas
Referência de Interface– Uma ou mais referências para identificação do objeto,
através de sua(s) interface(s)
Ciclo de vida– Objetos são criados e posteriormente destruídos
(explícita ou implicitamente)
Interfaces de um Objeto
• Um objeto pode ter várias interfaces
• Permitem abstrair a implementação interna do objeto• Múltiplas visões ou formas de acesso ao mesmo objeto– Para uso por clientes diferentes
ObjetoInterfaceFuncional
Interface de Gerenciamento
Exemplo:
Especificação de Objetos
Template
Descrição completa das características de um objeto– Interfaces e implementação
Contém tudo o que é necessário para criar um objeto de um certo tipo
– Um modelo ou fôrma para criação de objetos
Ex.: classes em Java e C++
Tipos e Classes em RM-ODP
Tipo
• Predicado definindo as propriedades de um ou mais objetos• Dois objetos são do mesmo tipo sse o predicado é
verdadeiro para ambos• Geralmente, pode ser expresso em termos das interfaces que
um objeto oferece• Define o serviço oferecido por um objeto
Classe
Conjunto de objetos do mesmo tipo
Tipos e Classes em RM-ODP
PredicadoÉVermelho: O → {V,F}
Tipo Vermelhoobj é do tipo Vermelho ÉVermelho(obj) = V
Classe Vermelho{obj | ÉVermelho(obj)=V}
Conjunto de objetos O
Classe Vermelho
Templates
instanciação
Sub-tipos e Sub-classes
C1, C2
C1 é subclasse de C2 C1 C2
T1, T2
T1 é um sub-tipo de T2 P(T1) => P(T2)
onde P(T) denota o predicado que define o tipo T
Sub-tipos e Sub-classes
Sub-classes e sub-tipos são conceitos relacionadosPodem ser usados para formar hierarquias
Predicados
ÉVermelho
ÉQuadradoVermelho
T2
T1
C2
C1
define
define
sub-tipo de
Tipos
Classes
Herança em Sistemas Distribuídos Herança de Implementação
Template definido em termos de um ou mais templates
base– O código do objeto pode não estar
todo localizado no mesmo lugar
– Pode precisar ser fazer acesso remoto ao código (download) antes de executar algum método
– Problemas de desempenho que podem tornar este tipo de mecanismo impróprio para uso em sistemas distribuídos
Herança de InterfaceA interface de um objeto pode ser definida como extensão de uma ou mais interfaces base
– Apenas a definição do tipo é envolvida – a implementação continua local
– Permite implementar sub-tipagem
– Permite explorar polimorfismo
– Seu uso é bastante vantajoso em sistemas distribuídos
– Pois permite o uso de serviços equivalentes (embora não idênticos)
Modelos de Interação entre Objetos
Três tipos de interação
Operações
Fluxos
Sinais
OperaçõesPadrão de interação do tipo cliente / servidor
– Cliente requisita a um objeto servidor a realização de alguma operação
– Servidor processa a requisição
– Servidor pode retornar um resultado (resposta)
Objetos envolvidos podem assumir dois papéis distintos: cliente ou servidor
Operações: Interrogações
Operações com resposta
Requisição
Resposta
ObjetoCliente
ObjetoServidor
Operações: Anúncios
Operações sem resposta
Requisição
ObjetoCliente
ObjetoServidor
FluxosPadrão para interações em que:
– Há um fluxo contínuo de unidades de dados entre dois ou mais objetos
– Com relacionamento temporal entre as unidades de dados transmitidas
– Modelo mais adequado à transferência de dados baseados em mídias contínuas (i.e., com dependência temporal)
• Ex.: áudio e vídeo
Objetos podem assumir dois papéis: produtor e/ou consumidor
Fluxos
Unidades de dados
ObjetoProdutor
ObjetoConsumidor
Sinais
ObjetoEmissor
ObjetoReceptor
Emissão deSinal
Recepção deSinal
Uma forma de interação mais primitiva– Permite que um objeto sinalize a outro objeto a
ocorrência de um evento– Outras formas de interação podem ser construídas como
uma série de sinais coordenados
Uma Consideração Final sobre o Conceito Fundamental de Objeto Distribuído
Implementação Distribuída dos objetos•Estado distribuído•Código distribuído
Implementação Centralizada e Interfaces Remotas
•Estado e código localizados no mesmo processo
•Interfaces localizadas junto aos clientes
Processo1
Processo2
Máquina A Máquina B
Estado do Objeto
Código dos Métodos
Máquina A Máquina B
Objeto
Proxy
Cliente
InterfaceRemota
Modelo mais utilizado em sistemas de middleware de uso prático
Modelo utilizado em sistemas de middleware experimentais.
•Especialmente aqueles que empregam algum modelo de composição de
componentes (em lugar de objetos convencionais)
Java RMI
• Modelo de objetos distribuído integrado como parte linguagem Java
• Dependente de linguagem
• Independente de SO, hardware, rede
• Duas categorias de objetos: locais e remotos– Muito parecidos, mas com algumas diferenças
fundamentais decorrentes da distribuição
Diferenças entre Objetos Locaise Objetos Remotos
Clonagem de objetos• Pode-se criar uma cópia idêntica de um objeto, mas esta não será
imediatamente acessível aos clientes do objeto original• i.e., a referência de objeto (ou o proxy) não é clonado – é necessário
um novo binding
Semântica de bloqueio na chamada de métodos declarados como synchronized
• o bloqueio deveria ocorrer no proxy, antes da chamada – muito complexo, não implementado
• bloqueio no servidor é problemático, pois um cliente que ganha acesso ao método e, em seguida, falha nunca liberará o acesso para
outros objetos
Características de Java RMI
Passagem de parâmetros• Qualquer objeto, primitivo ou não, pode ser passado
como parâmetro– a classe do objeto precisa ser declarada como serializable
– exceções: descritores de arquivos e sockets
• Objetos locais são passados por valor
• Objetos remotos são passados por referência– a referência de objeto (proxy) é passada por valor!
Modelo em Camadas de Java RMI
O proxy contém todo o “conhecimento” específico necessário para fazer chamadas a um objeto remoto
Em Java, basta serializá-lo e enviá-lo no lugar da própria referência de objeto!!!
Programa Cliente
Camada deReferências Remotas
Proxy
Camada de Transporte
Programa Servidor
Camada deReferências Remotas
Skeleton
Camada de TransporteA Internet
Caminho lógicode comunicação
Próxima Parte...
Middleware Orientado a Mensagens