OBJETOS DISTRIBUÍDOS E INVOCAÇÃO REMOTA
SUMÁRIO Introdução Comunicação entre objetos distribuídos Eventos e Notificações
1.INTRODUÇÃO Middleware oferece: Transparência de localização Independência de protocolos de comunicação Independência do hardware de computador Ocultação do sistema operacionais Uso de várias linguagens de programação Aplicativos RMI, RPC e eventos Protocolo Requesição-Respostal Representação Externa dos Dados Camadas Middleware Sistemas Operacionais
1.INTRODUÇÃO Interfaces: Interfaces em Sistemas Distribuídos Passagem de parâmetros: entrada e saída Variáveis não são acessadas diretamente Ponteiros (referências locais) não podem ser passados Interfaces de Serviço Cliente-servidor Procedimentos oferecidos Interfaces Remotas Especificação dos métodos disponíveis Passagem de objetos Linguagens de definição de interface RMI Java IDL do CORBA
EXEMPLO CORBA IDL // In file Person.idl struct Person { string name; string place; long year; } ; interface PersonList { readonly attribute string listname; void addperson(in Person p) ; void getperson(in string name, out Person p); long number(); };
2.COMUNICAÇÃO ENTRE OBJETOS DISTRIBUÍDOS O modelo de objeto Objetos distribuídos O modelo de objeto distribuído Problemas de projeto Implementação Coleta de lixo (garbage collection) distribuída
O MODELO DE OBJETO Referências de objeto Nome objeto e método Interfaces Assinatura dos métodos Métodos sem corpo Sem construtor Ações O estado do receptor pode ser alterado Um novo objeto pode ser instanciado Outras invocações podem ocorrer
O MODELO DE OBJETO Exceções Maneira mais clara de tratar falhas Testes no código diminuem a clareza Lista de exceções Disparar, capturar exceções Coleta de lixo Necessidade de liberar espaço em memória não ocupado Liberar o programador da obrigação de lidar com a alocação de memória Redução dos erros de implementação
OBJETOS DISTRIBUÍDOS Extensão do modelo de objeto Separação lógica Distribuição física Arquitetura Cliente-Servidor Outras Acesso Invocação método remoto Execução método no servidor Retorno mensagem
OBJETOS DISTRIBUÍDOS Encapsulamento Concorrência Falhas Tolerância a falhas Replicação Desempenho Disponibilidade
RMI REMOTE METHOD INVOCATION Maquina Local (Cliente) Maquina Remota (Servidor) SampleServer remoteobject; int s; s = remoteobject.sum(1,2); public int sum(int a,int b) { return a + b; } System.out.println(s);
O MODELO DE OBJETOS DISTRIBUÍDOS Invocação a métodos remotos Objetos remotos Referência de objeto remoto A Invocação remota B Invocação local C D E Invocação remota F
RMI REMOTE METHOD INVOCATION
O MODELO DE OBJETOS DISTRIBUÍDOS Interface Remota Objeto remoto Data Interface remota m1 { implementação m2 m3 dos métodos m4 m5 m6
O MODELO DE OBJETOS DISTRIBUÍDOS Ações em um sistema de objeto distribuído Coleta de lixo em um sistema de objeto distribuído Exceções L C Invocação remota instanciação M N Invocação remota K
PROBLEMAS DE PROJETO PARA RMI Semântica de invocação RMI Falhas Re-tentativa de mensagem de requisição Filtragem de duplicadas Retransmissão de resultados
PROBLEMAS DE PROJETO PARA RMI Semântica Talvez Falhas: Omissão, Colapso Semântica Pelo Menos Uma Vez Falhas: Colapso, Bizantinas RPC Sun Semântica No Máximo Uma Vez RMI Java CORBA
TOLERÂNCIA A FALHAS Medidas de Tolerância a Falhas Retransmissão Mensagem de Requisição Filtragem de Mensagens duplicadas Re-execução do método Ou retransmissão resposta Semântica Não - - Talvez Sim Não Re-execução método Ao menos uma vez Sim Sim Retransmição resposta No máx uma vez
PROBLEMAS DE PROJETO PARA RMI Transparência Diferença vs Semelhança Falhas Latência Semântica Caso: IDL CORBA, RMI Java Consenso atual: mesma sintaxe, mas diferença expressa na interface RMI Java => interface Remote e uso de RemoteException
IMPLEMENTAÇÃO DE RMI Módulo de comunicação Requisição-resposta Semântica No Máximo Uma Vez Módulo de referência remota Tabela de objetos Serventes Software RMI Proxy Despachante Esqueleto Geração das classes para proxies, despachantes e esqueletos
IMPLEMENTAÇÃO RMI Cliente objeto A proxy para B Requisição Resposta Servidor objeto esqueleto remoto B e dispachante para B Módulo Módulo Referência Comunicação Remota Módulo Comunicação Módulo Referência Remota servidor
IMPLEMENTAÇÃO DE RMI Ativação dinâmica: uma alternativa aos proxies Invocação dinâmica Esqueletos dinâmicos Programas clientes e servidores Métodos de fábrica O vinculador (binder) Threads no servidor Invocação de objetos remotos Ativação Repositório de objetos persistentes Localização de objetos
COLETA DE LIXO DISTRIBUÍDA Colaboração com coletores de lixo locais addref(b), removeref(b) Leasing Arrendamento (leasing) no Jini
EVENTOS E NOTIFICAÇÕES Paradigma: publicar-assinar Características Heterogêneos Assíncronos Tipos de eventos Participantes Objeto de interesse Evento Notificação Assinante Objetos observadores Gerador de eventos
EVENTOS E NOTIFICAÇÕES Computador do Operador Fonte externa Computador do Operador Operador Notificação Notificação Operador Notificação Provedor de informação Notificação Operador Notificação Computador do Operador Notificação Notificação Provedor de informação Notificaçã o Fonte externa Notificação Computador do Operador Notificação Notificação Operador
EVENTOS E NOTIFICAÇÕES Semântica de entrega de notificações Funções dos observadores Encaminhamento Filtragem de notificações Padrões de eventos Caixas de correio de notificação Jini Geradores de evento Escutador Eventos remotos Agentes intermediários RMI Java: RemoteEventListener e EventGenerator
EVENTOS E NOTIFICAÇÕES Objeto de interesse Serviço de Evento Assinante 1. notificação Objeto de interesse Observador Assinante 2. notification notificação Objeto de interesse Observador Assinante 3. notificação
ESTUDO DE CASO: RMI JAVA Extensão objetos distribuídos em Java Interfaces remotas Ampliação interface remote, java.rmi Passagem de parâmetros e resultados Parâmetros entrada e saída Interface Serializable Passagem de objetos remotos: passagem referência remota Passagem de objetos não-remotos: passagem por valor
ESTUDO DE CASO: RMI JAVA Download de classes RMIregistry Programa servidor Programa cliente Uso de reflexão Classes Java que suportam RMI UnicastRemoteObject
RESUMO Paradigmas Programação distribuída Invocação método remoto Sistemas baseados em eventos Objetos distribuídos podem se comunicar RMI forma síncrona Modelo baseado em eventos Assíncrono Objeto distribuído = ampliação do modelo objetos locais Encapsulamento Referência a objeto remoto Principal diferença entre RMI e RPC
RESUMO Semânticas Objetos locais: exatamente uma vez Objetos remotos: no máximo uma vez Transparência Não é necessariamente uma boa idéia fazer a invocação remota parecer exatamente igual à uma invocação local Middleware da RMI Proxies Esqueletos Despachantes Interface remota
RESUMO Sistemas distribuídos baseados em eventos Heterogêneos Assíncronos Não precisam de interface remota Implementação para enviar e receber notificações
REFERÊNCIAS BIBLIOGRAFICAS COULOURIS G. Sistemas Distribuídos Conceitos e Projeto, Bookman Editora, 2007. 4º Ed. Capítulo 5