380 likes | 457 Views
This project discusses the implementation of Middleware Aquiles Burlamaqui Luiz Eduardo RPC & RMI, exploring the history, motivation, objectives, and elements involved. It covers the step-by-step process of Remote Procedure Call (RPC), data transmission, marshalling/unmarshalling, and the role of stubs in RPC communication. The text provides insights into the challenges faced in distributed environments, the benefits of RPC focus, and the popular implementation of Sun's RPCGEN tool. It also touches on RPC failures and solutions, as well as the significance of RPC in enabling transparent communication in distributed systems.
E N D
Projeto e Implementação de Middleware Aquiles Burlamaqui Luiz Eduardo
RPC & RMI • Agenda • Motivação • História • Objetivo • Elementos • Passo a Passo
Chamada de Procedimentos Remotos (RPC) • Motivação: • Dificuldade em programar para Ambientes distribuídos • Desvantagem do socket • Foco na aplicação
RPC • História • 1976 – Descrito na RFC 707 • 1981 – Uso Comercial Xerox • Sun’s RPC para Unix(ONC RPC) – base para o Sun NFS • DCE/RPC para Unix, usada pela OSF • Microsoft RPC adota o DCE/RPC
Chamada de Procedimentos Remotos (RPC) • Objetivo • Tornar fácil a implementação de aplicações distribuídas • Permitir chamada de procedimento remoto como se fosse local
Visão geral • Um processo A chama um procedimento p de um processo B, entrando em estado de espera • O processo B passa a executar o procedimento p, e ao seu término faz um reply para o processo A • O processo A volta à sua execução normal após ter recebido o reply
Transmissão de dados • Dados em programas são estruturados enquanto que mensagens carregam informação sequencial: » Linearização/Restauração de dados • Heterogeneidade na representação de dados em computadores: » Uso de um formato externo comum » Inclusão de uma identificação de arquitetura na mensagem
Marshalling/Unmarshalling • Marshalling: • Linearização de uma coleção de itens de dados estruturados • Tradução dos dados em formato externo • Unmarshalling: • Tradução do formato externo para o local • Restauração dos itens de dados de acordo com sua estrutura
RPC – Como? • Esconde o código das chamadas a rede em procedimentos chamados stubs. • Stubs – procedimentos que contem código de chamadas de rede • Esconde detalhes como socket. • XDR ( External Data Representation ) – padrão IETF, RFC 4506 • RPCGEN é uma ferramenta utilizada para gerar os stubs.
Passo a Passo RPC Criar aplicação convencional Dividir o programa em duas partes Criar uma especificação rpcgen Executar o rpcgen Criar servidor Criar cliente Compilar cliente Compilar servidor Executar servidor e cliente
RPC Número do procedimento Versão Número do programa Rpcgen IDL
Funções dos Stubs • Client stub • intercepta a chamada • empacota os parâmetros (marshalling) • envia mensagem de request ao servidor • Server stub • recebe a mensagem de request • desempacota os parâmetros (unmarshalling) • chama o procedimento, passando os parâmetros • empacota o resultado • envia mensagem de reply ao cliente • Client stub • recebe a mensagem de reply • desempacota o resultado • passa o resultado para o cliente
Chamadas e mensagens em RPC Máquina do Cliente Máquina do Servidor 2 4 1 empacota parâmetros 5 desempacota parâmetros 0 6 cliente servidor desempacota resultados empacota resultados 7 11 10 8 Kernel Kernel 3 transporte de mensagens via rede 9
Falhas em RPC • O cliente não é capaz de localizar o servidor • A mensagem de request do cliente para o servidor é perdida • A mensagem de reply do servidor para o cliente é perdida • O servidor pára após ter recebido a mensagem de request • O cliente pára após ter enviado a mensagem de request
RPC – Cliente não consegue localizar o servidor • Causas • Servidor está fora do ar • Cliente está usando versão antiga do servidor • Soluções • Variáveis com código de retorno indicando erro • Exceções
RPC – Perda das Mensagens de Solicitação • Causa • Problema na rede • Soluções • Temporização para chegada da resposta ou mensagem de reconhecimento • Tempo expira – retransmissão da mensagem
Perda das mensagens de resposta • Causa • Perda da solicitação • Perda da resposta • Servidor • Soluções • Fácil de tratar quando a operação é idempotente • Atribuir número sequencial as solicitações
RPC • Uma maneira de fazer comunicação em sistemas distribuídos de uma forma transparente. • Proposta por Birrel e Nelson em 1984. • Birrell & Nelson 1984: A. D. Birrell and B. J. Nelson. ``Implementing remote procedure calls.'' ACM Transactions on Computer Systems, 2(1):39-59 • Um procedimento numa máquina A chama um procedimento numa máquina B. • Para o programador, tudo se parece como se os dois procedimentos fizessem parte do mesmo programa.
RPC • O sistema (middleware) se encarrega da comunicação entre as máquinas. • Implementação popular: Sun rpcgen desenvolvido no final dos anos 80. • Desenvolvimentos da idéia de RPC: • CORBA • Java RMI • DCOM
RMI • Motivação • Problemas com o RPC • Necessidade de aprender uma linguagem IDL • Suporte limitado para tipos de dados • Fortalecimento das linguagens Orientadas a Objetos
RMI API Java que permite a execução de chamadas remotas no estilo RPC Permite objetos Java invocar transparentemente métodos de outros objetos (que podem estar em máquinas diferentes – objetos remotos) Java RMI libera o programador de tratar de detalhes como endereçamento e codificação/ decodificação de mensagens
Localização de Objetos Seria impraticável se para cada invocação de método remoto fosse necessário incluir o par (máquina,porta) para identificar onde se encontra o objeto que contém o método RMI oferece um Serviço de Nomes (RMI Registry) que oferece informações sobre a localização de objetos remotos. rmiregistry executa em um endereço bem conhecido.
RMI Registry ref_obj Naming.lookup(“rmi://natalnet.br/servobjA”) RMI Registry Naming.bind(“servobjA”, ref_obj); ref_obj:metodo() Servidor
RMI • O modelo RMI: • O servidor define objetos que o cliente pode usar remotamente • Os clientes podem invocar métodos nesse objeto remoto como se ele estivesse executando localmente. • RMI esconde o mecanismo subjacente de transporte, via rede, de argumentos dos métodos e valores de retorno.
RMI • Definir uma interface que declara os métodos remotos • O programa servidor • deve incluir uma class que implementa essa interface. • deve criar um objeto remoto e registrá-lo no serviço de nomes (rmi register) • O programa cliente • deve perguntar ao serviço de nomes pela referência do objeto remoto.– deve invocar o método sobre o objeto remoto
RMI • Interface • Similar a classe • Não há implementação, apenas declaração de métodos • Tudo é público • É uma API que pode ser implementada por uma classe
RMI • Servidor • A interface definida pelo servidor deve declarar que os métodos da interface serão invocados por clientes remotos • A interface deve estender a interface Java Remote que o pacote java.rmi oferece
RMI • Criar uma classe que implementa a interface. A classe deve estender UnicastRemoteObject • O código main() deve: • Criar um objeto remoto • Registrar esse objeto no serviço de Nomes • A classe precisa definir um construtor para RemoteException ! • A classe será usada pelo compilador rmic paracriar o código do stub e do skeleton.
RMI Uma aplicação RMI distribuída usa o "rmiregistry" para obter uma referência ao objeto remoto.
RMI – Passo a Passo • Defina a interface do servidor (estendendo a interface java.rmi.remote) • Escreva o código do servidor que implementa a interface (herdando da classe java.rmi.UnicastRemoteObject) • Compile o servidor • Use o compilador javac para produzir o arquivo .class • Execute o compilador rmic para obter o stub e skeleton • Execute o programa servidor (o rmiregister tem de estar executando antes) • Execute o cliente
Exercício • 1) Construir dois exemplos simples que utilizem cada uma das tecnologias vistas em aula(RPC e RMI) • Com base na experiência adquirida fazer um comparativo entre eles.
Referencias http://en.wikipedia.org/wiki/Remote_procedure_call http://www.dimap.ufrn.br/~thais/ www.ppgia.pucpr.br/~alcides www.cin.ufpe.br/~if677 virtual01.lncc.br/~licht http://www.cs.cf.ac.uk/Dave/C/node33.html