projeto e implementação de middleware
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/1.jpg)
Aquiles BurlamaquiLuiz Eduardo
![Page 2: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/2.jpg)
Agenda• Motivação• História• Objetivo• Elementos• Passo a Passo
![Page 3: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/3.jpg)
Motivação: • Dificuldade em programar para Ambientes
distribuídos• Desvantagem do socket• Foco na aplicação
![Page 4: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/4.jpg)
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
![Page 5: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/5.jpg)
Objetivo• Tornar fácil a implementação de aplicações
distribuídas• Permitir chamada de procedimento remoto
como se fosse local
![Page 6: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/6.jpg)
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
![Page 7: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/7.jpg)
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
![Page 8: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/8.jpg)
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
![Page 9: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/9.jpg)
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.
![Page 10: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/10.jpg)
1. Criar aplicação convencional2. Dividir o programa em duas partes3. Criar uma especificação rpcgen4. Executar o rpcgen 5. Criar servidor6. Criar cliente7. Compilar cliente8. Compilar servidor9. Executar servidor e cliente
![Page 11: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/11.jpg)
![Page 12: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/12.jpg)
Rpcgen IDL
Versão Número do procedimento
Número do programa
![Page 13: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/13.jpg)
![Page 14: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/14.jpg)
![Page 15: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/15.jpg)
![Page 16: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/16.jpg)
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
![Page 17: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/17.jpg)
Máquina do Cliente Máquina do Servidor
Kernel Kernel
cliente servidor
empacotaparâmetros
desempacotaresultados
desempacotaparâmetros
empacotaresultados
transporte de mensagensvia rede
12
3
4
0 56
7
8
9
1011
![Page 18: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/18.jpg)
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
![Page 19: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/19.jpg)
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
![Page 20: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/20.jpg)
Causa• Problema na rede
Soluções• Temporização para chegada da resposta ou
mensagem de reconhecimento• Tempo expira – retransmissão da
mensagem
![Page 21: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/21.jpg)
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
![Page 22: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/22.jpg)
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.
![Page 23: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/23.jpg)
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
![Page 24: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/24.jpg)
Motivação• Problemas com o RPC
Necessidade de aprender uma linguagem IDL Suporte limitado para tipos de dados Fortalecimento das linguagens Orientadas a
Objetos
![Page 25: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/25.jpg)
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
![Page 26: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/26.jpg)
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.
![Page 27: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/27.jpg)
RMI Registry
Servidor
Naming.bind(“servobjA”, ref_obj);
Naming.lookup(“rmi://natalnet.br/servobjA”)
ref_obj:metodo()
ref_obj
![Page 28: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/28.jpg)
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.
![Page 29: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/29.jpg)
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
![Page 30: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/30.jpg)
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
![Page 31: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/31.jpg)
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
![Page 32: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/32.jpg)
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.
![Page 33: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/33.jpg)
![Page 34: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/34.jpg)
![Page 35: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/35.jpg)
Uma aplicação RMI distribuída usa o "rmiregistry" para obter uma referência ao objeto remoto.
![Page 36: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/36.jpg)
1. Defina a interface do servidor (estendendo a interface java.rmi.remote)
2. Escreva o código do servidor que implementa a interface (herdando da classe java.rmi.UnicastRemoteObject)
3. Compile o servidor1. Use o compilador javac para produzir o arquivo .class2. Execute o compilador rmic para obter o stub e skeleton
4. Execute o programa servidor (o rmiregister tem de estar executando antes)
5. Execute o cliente
![Page 37: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/37.jpg)
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.
![Page 38: Projeto e Implementação de Middleware](https://reader035.vdocuments.mx/reader035/viewer/2022062804/56814c1f550346895db923a9/html5/thumbnails/38.jpg)
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