Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Distribuídos Invocação Remota de Procedimentos e de Métodos Joinvile Batista Junior UFGD - SD 04 - Joinvile Batista Junior 2 Invocação Remota de Procedimentos e de Métodos A : Programação Estendida para Sistemas Distribuídos B : Chamada de Procedimento Remoto C : RMI (Remote Method Invocation) UFGD - SD 04 - Joinvile Batista Junior 3 A : Programação Estendida para Sistemas Distribuídos 1. Comente transparência de localização e independência de protocolos na invocação remota. 2. Comente as semelhanças e diferenças entre o RPC e o RMI UFGD - SD 04 - Joinvile Batista Junior 4 Camadas do Middleware Applications Middleware layersRequest reply protocol External data representation Operating System RMI, RPC and events UFGD - SD 04 - Joinvile Batista Junior 5 Modelos de Programação Estendidos para SDs • alguns modelos de programação foram estendidos para aplicação em SDs – RPC – Remote Procedure Call • o mais antigo • programas clientes chamam procedimentos implementados em programas servidores – RMI – Remote Method Invocation • objeto invoca método de objeto remoto • pode ser incorporado a um linguagem: útil quando cliente e servidor são implementados na mesma linguagem – ex: RMI Java UFGD - SD 04 - Joinvile Batista Junior 6 Middleware • middleware para processamento remoto utiliza camada baseada em mensagens entre processos – ex: a abstração da RMI é baseada em baseada no protocolo requisição-resposta • transparência de localização – em RPC e RMI o cliente não sabe se a invocação é local ou remota – objetos que geram e recebem eventos não conhecem a localização uns dos outros • independência dos protocolos de transporte (UDP ou TCP) e dos SOs • padrões utilizados na representação externa de dados (CDR do CORBA, Serialização de Objetos do Java, XML) – ocultam diferenças da arquitetura do hardware (ex: ordem dos bytes) • CORBA suporta invocação remota de componentes em várias linguagens de programação – utiliza linguagem IDL (Interface Description Language) para determinar a interface com o componente em cada linguagem UFGD - SD 04 - Joinvile Batista Junior 7 Interfaces • interface especifica os métodos/procedimentos chamados pelo cliente e executados remotamente – embora a IDL CORBA permita especificar atributos • eles só podem ser acessados através dos métodos • mecanismos de passagem de parâmetros do RMI – parâmetros passados por valor • valores de tipos simples e objetos – referências para objetos remotos • não confundir com ponteiros (referências a objetos locais) – pois não se referem a uma posição específica de memória • IDL especifica interfaces em CORBA – para encapsular componentes de várias linguagens UFGD - SD 04 - Joinvile Batista Junior 8 B : Chamada de Procedimento Remoto 1. Comente o papel dos stubs na chamada para o RPC. 2. Comente as tarefas do compilador de interfaces para o RPC. 3. Comente o registro de interfaces e a busca de endereços de interfaces no servidor de nomes. UFGD - SD 04 - Joinvile Batista Junior 9 Chamada de Procedimento Remoto • mecanismo que torna transparente ao programador – chamada de procedimentos em outras máquinas • integra modelo de comunicação cliente/servidor – com uma linguagem de programação procedural • RPC é muito parecida com RMI – um processo servidor define em sua interface de serviço os procedimentos que estão disponíveis para chamada remota – implementada sobre um protocolo requisição-resposta • simplificado pela ausências das referências de objetos remotos nas requisições – diferença fundamental • não tem a capacidade de criar novas instâncias de objetos – portanto: não suporta referências de objetos remotos UFGD - SD 04 - Joinvile Batista Junior 10 Procedimento Remoto UFGD - SD 04 - Joinvile Batista Junior 11 Passagem de Parâmetros • há uma definição de parâmetros – de entrada e de saída • parâmetros podem ser passados – por valor – por referência • devem ser especificados se são – de entrada, de saída, ou ambos • estruturas que contém ponteiros – não podem ser passadas como argumento • interdição de acesso a variáveis globais – da entidade chamadora UFGD - SD 04 - Joinvile Batista Junior 12 Stubs do cliente e do servidor - RPC client Request Reply CommunicationCommunication modulemodule dispatcher service client stub server stub procedure procedure client process server process procedureprogram UFGD - SD 04 - Joinvile Batista Junior 13 Stubs do Cliente • código associado a cada procedimento chamado • converte chamada local em remota • uso de interface de definição comum • funções – empacotar argumentos – gerar mensagem – enviar mensagem ao servidor – esperar pelo reply – desempacotar mensagem – retornar resultado ao programa local UFGD - SD 04 - Joinvile Batista Junior 14 Programa Servidor • Dispatcher – mapeia identificador de procedimento • em stub do servidor • Stub do Servidor – associado a cada procedimento chamado • desempacotar argumentos • chamar procedimento associado ao serviço • esperar pela execução do serviço • empacotar argumentos em uma mensagem de reply UFGD - SD 04 - Joinvile Batista Junior 15 Chamada de Procedimento Remoto UFGD - SD 04 - Joinvile Batista Junior 16 Tarefas do Compilador de Interfaces • gerar procedimentos stubs para o cliente – um para cada procedimento de interface – compilado e linkado ao código do cliente • gerar procedimentos stubs para o servidor – um para cada procedimento de interface – compilado e linkado junto com o dispatcher ao código do servidor • gerar rotinas de marshalling/unmarshalling • gerar código para ser usado nas aplicações – cabeçalhos de procedimentos de serviços UFGD - SD 04 - Joinvile Batista Junior 17 Localizando o Servidor • Utiliza servidores de nomes – servidor registra procedimentos com o servidor de nomes UFGD - SD 04 - Joinvile Batista Junior 18 Binding (Associação) • utiliza servidor de nomes (Binder) • interface para o servidor – registro de interfaces (serviços) • register (serviceName, serverPort, version) – destruição de registros de interfaces • withdraw (serviceName, serverPort, version) • interface para o cliente – consulta de endereços de interfaces • lookup (serviceName, version) returns serverPort • servidor exporta interface – e cliente importa interface UFGD - SD 04 - Joinvile Batista Junior 19 Servidor de Nomes (Binder) • diversos servidores – podem oferecer o mesmo serviço • serviço de autenticação para servidores • tolerante a falhas • localização – binder em endereço de máquina e porta fixos • localização em tempo de compilação (estático) – uso de recursos do SO (variáveis de ambiente) • para configurar endereço do binder – localização em tempo de execução (dinâmico) – uso de mensagens de broadcast • localização em tempo de execução (dinâmico) UFGD - SD 04 - Joinvile Batista Junior 20 C : RMI (Remote Method Invocation) 1. Compare a utilização de RMI com a comunicação por sockets. 2. Explique a utilização do conceito de interface para cliente e servidor no RMI. Suponha um cenário com 3 clientes, 3 interfaces e um servidor. 3. Explique como funciona a coleta de lixo distribuída. UFGD - SD 04 - Joinvile Batista Junior 21 Comunicação entre Objetos Distribuídos • modelo de objetos distribuídos – interface remota • todo objeto remoto tem uma interface que especifica a assinatura dos seus métodos que podem ser acessados de forma remota – nome, tipos dos argumentos, tipo do retorno, exceções • em Java RMI – uma interface remota deve estender a interfaceRemote – referência de objeto remoto • objetos podem invocar os métodos de um objeto remoto se tiverem acesso à referência do objeto remoto • pode ser passada como argumento ou resultado de invocação de métodos remotos UFGD - SD 04 - Joinvile Batista Junior 22 Objeto Remoto e sua Interface Remota interface remote m1 m2 m3 m4 m5 m6 Data implementation remoteobject { of methods UFGD - SD 04 - Joinvile Batista Junior 23 Invocações de Métodos em RMI • ação em um SD é iniciada pela invocação de um método e pode resultar na invocação de métodos de outros objetos – objetos envolvidos podem estar em diferentes processos ou em diferentes computadores • quando uma invocação cruza o limite de um processo ou de um processador – a referência remota do objeto deve estar disponível para o invocador • instanciação de um objeto com interface remota gerará uma referência a um objeto remoto • coleta de lixo (garbage colletion) distribuída é realizada pela cooperação dos coletores de lixo locais e um módulo adicional de controle • invocações de objetos em outros processos ou computadores pode causar exceções UFGD - SD 04 - Joinvile Batista Junior 24 Invocações de Métodos Locais e Remotos invocation invocation remote invocation remote local local local invocation invocation A B C D E F UFGD - SD 04 - Joinvile Batista Junior 25 Proxy (Stub) e Skeleton – RMI Java object A object B skeleton Request proxy for B Reply CommunicationRemote Remote referenceCommunication modulemodulereference module module for B’s class & dispatcher remote client server UFGD - SD 04 - Joinvile Batista Junior 26 Componentes da Implementação de RMI Módulo de Comunicação • dois módulos de comunicação cooperam para envio/recepção de mensagem conforme o protocolo requisição-resposta – mensagem: tipo, requestId, referência_remota_objeto • seleciona o Despachante para a classe do objeto a ser invocado Módulo de Referência Remota • responsável pela transformação entre referências de objeto local e remoto – e pela criação de referências de objeto remoto • contém tabela para registrar a correspondência entre as referência locais e remotas – no cliente: mantém entradas para os proxies locais – no servidor: mantém entradas para os objetos remotos • cria referência na primeira vez e armazena na tabela para reutilização Servente • instância de classe que implementa o corpo de um objeto remoto UFGD - SD 04 - Joinvile Batista Junior 27 Componentes da Implementação de RMI Software RMI • middleware responsável pela identificação do objeto remoto, empacotamento e desempacotamento da mensagem (enviada/recebida pelos Módulos de Comunicação) • componentes: Proxy, Despachante, Esqueleto Proxy • torna a invocação do método remoto transparente para o cliente, ocultando os detalhes de – criação/conversão de referência do objeto remoto (Módulo de Referência Remota) – empacotamento dos argumentos – desempacotamento dos resultados – e envio/recepção da mensagem (Módulos de Comunicação) UFGD - SD 04 - Joinvile Batista Junior 28 Componentes da Implementação de RMI Despachante • recebe a mensagem de requisição do Módulo de Comunicação • utiliza methodId para selecionar o método apropriado no Esqueleto • repassa a mensagem para o Esqueleto Esqueleto • desempacota os argumentos da mensagem, • invoca o método no Servente • empacota o resultado e as exceções em mensagem de resposta • envia mensagem para o método do proxy que fez a requisição Compilador RMI Java • gera as classes Proxy, Despachante e Esqueleto a partir de classe que implementa o objeto remoto Vinculador (Binder) • mantém tabela mapeando nomes textuais para referências a objetos remotos para registro e pesquisa de objetos remotos UFGD - SD 04 - Joinvile Batista Junior 29 Carregamento Dinâmico de Classes • baseado na anotação de classes durante a serialização • a anotação indica de onde conseguir as classes UFGD - SD 04 - Joinvile Batista Junior 30 Ativação de Objeto Remoto • evita o consumo de CPU por objetos inativos • suporta referências persistentes de objetos UFGD - SD 04 - Joinvile Batista Junior 31 Coleta de Lixo Distribuída • objetivo da Coleta de Lixo Distribuída – remover objeto remoto para o qual não haja mais nenhuma referência • algoritmo – cada servidor mantém um conjunto dos processos clientes que tem proxies para um dado objeto remoto R: R.ClientesRemotos – quando recebe, pela primeira vez, uma referência remota • cliente C invoca addRef (R) no servidor – servidor adiciona C a R.ClientesRemotos • e cria proxy para o objeto remoto R – quando Coletor de Lixo do cliente C percebe que o proxy para o objeto remoto R já não é mais necessário • invoca removeRef (R) no servidor – servidor remove C de R.ClientesRemotos • exclui o proxy para o objeto remoto B – quando B.Clientes estiver vazio e não existirem clientes locais • Coletor de Lixo Local do servidor recupera o espaço ocupado por R UFGD - SD 04 - Joinvile Batista Junior 32 C : RMI (Remote Method Invocation) 1. Explique os passos e as saídas do Projeto e Compilação no RMI. 2. Explique os passos e as saídas da Execução no RMI. 3. Explique os tipos de passagem de parâmetros no RMI. UFGD - SD 04 - Joinvile Batista Junior 33 RMI Java – Projeto e Compilação UFGD - SD 04 - Joinvile Batista Junior 34 RMI Java – Execução UFGD - SD 04 - Joinvile Batista Junior 35 RMI Java – Visão Geral da Execução UFGD - SD 04 - Joinvile Batista Junior 36 RMI Java – Compilador rmic • Gera os stubs (proxies) e skeletons – para cada classe que implementa uma interface remota • exemplo : rmic HelloImpl // extensão class – cria os arquivos • para servidor : HelloImpl_Skel.class • para o cliente : HelloImpl_Stub.class UFGD - SD 04 - Joinvile Batista Junior 37 RMI Java – Passagem de Parâmetros • Objeto não Remoto – objetos cujas instâncias podem ser copiadas entre espaços de endereços diferentes • deve implementar interface java.io.Serializable • cópia passada por valor – como parâmetro ou endereço de retorno • Objeto Remoto – objeto cujas instâncias podem ser usadas remotamente • deve implementar interface java.rmi.Remote • referência do objeto é passada – como parâmetro ou endereço de retorno – correspondente ao seu stub UFGD - SD 04 - Joinvile Batista Junior 38 C : RMI (Remote Method Invocation) 1. Explique as principais características do código de uma interface e de um servidor no RMI. 2. Explique as principais características do código de um cliente no RMI, incluindo o módulo de segurança obrigatório UFGD - SD 04 - Joinvile Batista Junior 39 RMI Java – Aplicação para Ilustração • Impressão de mensagens em um servidor – Interface • ServidorInt.java – Servidor • Servidor.java – Cliente • Cliente.java UFGD - SD 04 - Joinvile Batista Junior 40 Interface ServidorInt.java UFGD - SD 04 - Joinvile Batista Junior 41 Programa Servidor.java UFGD - SD 04 - Joinvile Batista Junior 42 Programa Cliente.java UFGD - SD 04 - Joinvile Batista Junior 43 RMI Java – Módulo de Segurança Obrigatório • todos os programas que usam RMI – devem instalar um módulo de segurança para • carregar objetos passados como parâmetros, valores retornados ou exceções – para garantir que o código carregado • obedece a requisitos de segurança – módulo de segurança • RMISecurityManager UFGD - SD 04 - Joinvile Batista Junior 44 Cliente utilizando Módulo de Segurança UFGD - SD 04 - Joinvile Batista Junior 45 RMI Java – Passos para Criar a Aplicação • compilar os arquivos – javac ServidorInt.java Servidor.java Cliente.java •gerar stub e skeleton – rmic Servidor • resultado : Servidor_Stub.class e Servidor_Skel.class • ativação do serviço de nomes – rmiregistry • ativação das aplicações – java Servidor – java Cliente UFGD - SD 04 - Joinvile Batista Junior 46 RMI Java – The Naming class of Java RMIregistry • void rebind (String name, Remote obj) • método utilizado pelo servidor para registrar o identificador de um objeto remoto • void bind (String name, Remote obj) • método alternativo utilizado pelo servidor para registrar um objeto remoto pelo nome • se o nome já está ligado a um objeto remoto : propaga uma exceção •void unbind (String name, Remote obj) • método remove uma associação (binding) entre um nome e um objeto •Remote lookup(String name) • método utilizado por clientes para localizar um objeto remoto por nome : retorna uma referência ao objeto •String [] list() • método retorna um array de Strings contendo os nomes associados no registro
Compartilhar