Sistemas Distribudos Comunicao Objetos Distribudos e RMI Parte
Sistemas Distribuídos Comunicação Objetos 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
Um Objeto Remoto e sua Interface Remota
Objetos Distribuídos 2 -16 Organização típica de um sistema de objetos distribuídos baseado em proxy e skeleton. Operação de binding: cliente obtém um proxy para o objeto remoto.
Conceitos de Implementação Adaptador de Objeto Processo servidor Máquina • Objeto de linguagem • Objeto remoto • Adaptador de objeto • Servidor Objetos remotos Objetos de linguagem: instâncias de classes que implementam os objetos remotos
Binding de um Cliente com um Objeto 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 (a) Distr_object obj. Pref; 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) Exemplo de binding implícito – utiliza apenas referências globais. Exemplo de binding explícito – utiliza referências globais e locais.
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!
Protocolo entre Cliente e Servidor Client do. Operation Server Request message (wait) (continuation) Reply message get. Request select object execute method send. Reply
Formato Geral das Mensagens O mesmo formato geral é utilizado tanto para requisições quanto para respostas.
Passagem de Parâmetros em RMI 2 -18 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. )
client object A proxy for B Request dispatcher Um Modelo para Implementação de RMI server remote skeleton object B for B’s class Reply Communication Remote reference module Communication module Remote reference module (Compare com o modelo de implementação de RPC. )
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 = object 1. method 1(param 1, param 2); • 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 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 Exemplo: Interface Funcional Interface de Gerenciamento
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} Templates Classe Vermelho instanciação Tipo Vermelho obj é do tipo Vermelho ÉVermelho(obj) = V Classe Vermelho {obj | ÉVermelho(obj)=V} Conjunto de objetos O
Sub-tipos e Sub-classes C 1, C 2 C 1 é subclasse de C 2 C 1 C 2 T 1, T 2 T 1 é um sub-tipo de T 2 P(T 1) => P(T 2) onde P(T) denota o predicado que define o tipo T
Sub-tipos e Sub-classes e sub-tipos são conceitos relacionados Podem ser usados para formar hierarquias Classes Predicados ÉVermelho Tipos define T 2 C 2 sub-tipo de ÉQuadrado. Vermelho define C 1 T 1
Herança em Sistemas Distribuídos Herança de Implementação Template definido em termos de um ou mais templates base Herança de Interface A interface de um objeto pode ser definida como extensão de uma ou mais interfaces base – O código do objeto pode não estar todo localizado no mesmo lugar – Apenas a definição do tipo é envolvida – a implementação continua local – Pode precisar ser fazer acesso remoto ao código (download) antes de executar algum método – Permite implementar sub-tipagem – Problemas de desempenho que podem tornar este tipo de mecanismo impróprio para uso em sistemas distribuídos – Seu uso é bastante vantajoso em sistemas distribuídos – Permite explorar polimorfismo – 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ções Padrã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 Objeto Servidor Objeto Cliente Requisição Resposta Operações com resposta
Operações: Anúncios Objeto Servidor Objeto Cliente Requisição Operações sem resposta
Fluxos Padrã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 Objeto Produtor Objeto Consumidor Unidades de dados
Sinais Objeto Emissor Emissão de Sinal Objeto Receptor Recepção de Sinal
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
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 Locais e 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 Programa Cliente Caminho lógico de comunicação Programa Servidor Proxy Skeleton Camada de Referências Remotas Camada de Transporte A Internet Camada de Transporte 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!!!
Próxima Parte. . . Middleware Orientado a Mensagens
- Slides: 36