Comunicação Distribuída – RPC
      Prof. Adriano Teixeira de Souza
   Estratégias diferentes que permitem a
    comunicação entre aplicações distribuídas.

   Tipos distintos de comunicação em um sistema
    distribuído:

    ◦ Sockets
    ◦ RPC – Remote Procedure Call
    ◦ RMI - Remote Method Invocation
    ◦ CORBA – Commom Object Request Broker Architecture
    ◦ EJB – Enterprise Java Bean
    ◦ Web Services


                              Prof. Adriano Teixeira de Souza
   Motivação:

    ◦ Dificuldade em programar para Ambientes
      distribuídos

    ◦ Desvantagem do socket

    ◦ Foco na aplicação



                          Prof. Adriano Teixeira de Souza
   Objetivo

    ◦ Tornar fácil a implementação de aplicações
      distribuídas

    ◦ Permitir chamada de procedimento remoto como
      se fosse local




                           Prof. Adriano Teixeira de Souza
   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




                                 Prof. Adriano Teixeira de Souza
   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


                                Prof. Adriano Teixeira de Souza
   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.




                           Prof. Adriano Teixeira de Souza
1.   Criar aplicação convencional
2.   Dividir o programa em duas partes
3.   Criar uma especificação rpcgen
4.   Executar o rpcgen
5.   Criar servidor
6.   Criar cliente
7.   Compilar cliente
8.   Compilar servidor
9.   Executar servidor e cliente


                        Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
   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


                                  Prof. Adriano Teixeira de Souza
Máquina do Cliente                                 Máquina do Servidor

                   2                           4
             1    empacota               desempacota       5
     0                                                                6
                  parâmetros             parâmetros
   cliente                                                         servidor
                  desempacota                empacota
             11                                                7
                  resultados                 resultados
                   10                                8


             Kernel                                  Kernel

                                3
                                          transporte de mensagens
                                9         via rede


                                Prof. Adriano Teixeira de Souza
   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.

                                        Prof. Adriano Teixeira de Souza
   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 - Common Object Request Broker Architecture
    ◦ Java RMI - Remote Method Invocation
    ◦ DCOM - Distributed Component Object Model




                              Prof. Adriano Teixeira de Souza

Sistemas Distribuídos - Comunicação Distribuída – RPC

  • 1.
    Comunicação Distribuída –RPC Prof. Adriano Teixeira de Souza
  • 2.
    Estratégias diferentes que permitem a comunicação entre aplicações distribuídas.  Tipos distintos de comunicação em um sistema distribuído: ◦ Sockets ◦ RPC – Remote Procedure Call ◦ RMI - Remote Method Invocation ◦ CORBA – Commom Object Request Broker Architecture ◦ EJB – Enterprise Java Bean ◦ Web Services Prof. Adriano Teixeira de Souza
  • 3.
    Motivação: ◦ Dificuldade em programar para Ambientes distribuídos ◦ Desvantagem do socket ◦ Foco na aplicação Prof. Adriano Teixeira de Souza
  • 4.
    Objetivo ◦ Tornar fácil a implementação de aplicações distribuídas ◦ Permitir chamada de procedimento remoto como se fosse local Prof. Adriano Teixeira de Souza
  • 5.
    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 Prof. Adriano Teixeira de Souza
  • 6.
    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 Prof. Adriano Teixeira de Souza
  • 7.
    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. Prof. Adriano Teixeira de Souza
  • 8.
    1. Criar aplicação convencional 2. Dividir o programa em duas partes 3. Criar uma especificação rpcgen 4. Executar o rpcgen 5. Criar servidor 6. Criar cliente 7. Compilar cliente 8. Compilar servidor 9. Executar servidor e cliente Prof. Adriano Teixeira de Souza
  • 9.
  • 10.
  • 11.
    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 Prof. Adriano Teixeira de Souza
  • 12.
    Máquina do Cliente Máquina do Servidor 2 4 1 empacota desempacota 5 0 6 parâmetros parâmetros cliente servidor desempacota empacota 11 7 resultados resultados 10 8 Kernel Kernel 3 transporte de mensagens 9 via rede Prof. Adriano Teixeira de Souza
  • 13.
    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. Prof. Adriano Teixeira de Souza
  • 14.
    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 - Common Object Request Broker Architecture ◦ Java RMI - Remote Method Invocation ◦ DCOM - Distributed Component Object Model Prof. Adriano Teixeira de Souza