Sistemas Distribuídos Jorge Surian [email protected] Sistemas Distribuídos: Comunicação (RPC)
Transcript of Sistemas Distribuídos Jorge Surian [email protected] Sistemas Distribuídos: Comunicação (RPC)
Sistemas DistribuídosJorge [email protected]
Sistemas Distribuídos: Comunicação (RPC)
22
RPC – Chamada de Procedimento Remoto
Conceitos– Birrell e Nelson (1984), enunciaram uma ideia
bastante simples (depois que alguém a teve...) que em resumo permite a processos chamarem procedimentos localizados em outras máquinas.
– Assim, quando um processo na máquina A chama um procedimento na máquina B, o processo chamador é suspenso, e a execução do procedimento chamado ocorre em B. Informações podem ser transportadas do chamador para o chamado indo e voltando nos parâmetros desses procedimentos.
2
33
RPC – Chamada de Procedimento Remoto
Conceitos– O desenvolvedor não precisa se preocupar mais
com detalhes de implementação de rede (ou seja, pode esquecer dos sockets!).
– A ideia é que tudo se passe como se tudo estivesse numa mesma máquina. E tudo transparente ao desenvolvedor.
– Embora conceitualmente simples, o RPC talvez não seja o que parece...
3
44
RPC – Chamada de Procedimento Remoto
Primeiros Problemas...
1.Arquiteturas de duas máquinas podem ser diferentes.
2.Espaço de endereçamento diversos.
3.Passagem de parâmetros.
4.O que fazer quando uma das máquinas falha.
4
55
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– A idéia fundamental é fazer com que uma
chamada de procedimento remoto pareça com uma chamada local.
– Consideremos uma instrução local, para compreendermos o funcionamento de procedimentos...
» count = read(fd, buffer, nbytes);
– Ora, a função em questão lerá no arquivo associado a fd, o número de caracteres indicado por nbytes, os retornado para a string buffer. Isso ocorre de acordo com a figura apresentada a seguir:
5
66
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...
6
77
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...
7
88
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– Para fazer a chamada, o chamador passa os
parâmetros para a pilha em ordem, começando pelo último, em acordo com esquema abaixo:
– Lembrar que assim printf pode sempre localizar a cadeia de formato no primeiro parâmetro que lê. 8
99
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– Quando concluída a execução do procedimento
read, este coloca o valor de retorno num registrador, remove o endereço de retorno e devolve o controle ao chamador.
– Finalmente são retirados os parâmetros da pilha, devolvendo-a ao estado original que tinha antes da chamada.
– Deve ser observado que parâmetros podem ser passados por valor ou por referência.
9
1010
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– Passagem por Valor:
»Considere-se a caixa do desenho, passagem por valor é equivalente a abrir a caixa, copiar o conteúdo (valor da variável) e só dar este valor ao procedimento. Obviamente, o valor original ficará na caixa e não mudará.
10
1111
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– Deve ser observado que parâmetros podem ser
passados por valor ou por referência.»Passagem por Referência é dar a caixa
(variável) ao procedimento e o procedimento pode usar e mudar o valor na caixa. No fim, o procedimento devolve a caixa com o novo valor.
11
1212
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– A ideia que fundamenta a RPC é fazer com que
uma chamada de procedimento remoto pareça o mais possível uma chamada local. A RPC deve ser transparente, ou seja, o procedimento de chamadas não deve estar ciente de que o procedimento chamado está executando em uma máquina diferente ou vice-versa.
12
1313
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– Exemplificando:
»O programador coloca uma chamada para read no código para obter dados.
»Num sistema tradicional, a rotina read é extraída da biblioteca pelo ligador e inserida no programa objeto.
13
1414
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– Exemplificando:
»É um procedimento curto, que em geral é implementada chamando uma chamada de sistema read equivalente. Dessa forma, o programador não sabe o que read de fato está fazendo.
»RPC consegue sua transparência de modo análogo. Se um read for um procedimento que executará na máquina do servidor de arquivo – uma versão diferente de read, denominada apêndice de cliente, é colocada na biblioteca.
14
1515
RPC – Chamada de Procedimento Remoto
Entendendo o funcionamento...– Exemplificando:
»No RPC a função read não pediria ao sistema operacional que lhe dê os dados, mas empacota os parâmetros em uma mensagem seja enviada para o servidor em acordo com o esquema abaixo:
15
1616
RPC – Chamada de Procedimento Remoto
Apêndices– Transparência conseguida com o uso de stubs
(apêndices)– Stub do cliente responsável por empacotar os
parâmetros em uma mensagem e enviar a mensagem para a máquina do servidor. Quando resposta chega, resultado é copiado para cliente, e controle volta a ele.
– Stub do servidor responsável por desempacotar parâmetros, chamar o procedimento do servidor e retornar resposta para máquina do cliente.
16
1717
RPC – Chamada de Procedimento Remoto Apêndices
17
1818
RPC – Chamada de Procedimento Remoto
RPC em etapas:
1. Procedimento do cliente chama stub cliente de modo usual.
2. Stub do cliente constrói uma msg e chama o Sistema Operacional.
3. Sistema Operacional envia msg para SO remoto.
4. Sistema Operacional remoto repassa msg para stub do servidor.
5. Stub do servidor desempacota parâmetros e chama procedimento servidor.
18
1919
RPC – Chamada de Procedimento Remoto
RPC em etapas:
6. Procedimento servidor executa e retorna o resultado.
7. Stub do servidor empacota resultado em uma msg e chama Sistema Operacional.
8. Sistema Operacional remoto envia msg para SO da máquina cliente.
9. Sistema Operacional do cliente passa msg para stub cliente.
10.Stub cliente desempacota resultado, repassando-o para o cliente.
19
2020
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros– Função do stub do cliente é pegar seus
parâmetros, empacotá-los em uma mensagem e enviá-los ao stub do servidor (montagem de parâmetros - parameter marshaling).
– Operação parece simples, mas:» Arquiteturas diferentes?» Passagem de ponteiros (diferente espaço de
endereçamento)?
20
2121
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Valor– A chamada do procedimento remoto add(i,j),
que pega dois parâmetros inteiros, i e j, e retorna sua soma aritmética como resultado.
– O add mostrada na parte esquerda (cliente), é um apêndice de cliente toma seus dois parâmetros e os coloca em uma mensagem como indicado. Coloca também o nome ou o número do procedimento a ser chamado na mensagem porque o servidor poderia suportar várias chamadas diferentes e é preciso lhe dizer qual delas é requerida.
21
2222
RPC – Chamada de Procedimento Remoto Passagem de Parâmetros por Valor
22
2323
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Valor– Quando a mensagem chega ao servidor, o
apêndice a examina para ver qual procedimento é necessário e então faz a chamada apropriada. Se o servidor também suportar outros procedimentos remotos, o apêndice de servidor poderia conter um comando de chaveamento para selecionar o procedimento a ser chamado, dependendo do primeiro campo da mensagem.
– A chamada propriamente dita do apêndice para o servidor é parecida com a chamada original do cliente, exceto que os parâmetros são variáveis inicializadas com base na mensagem que entra.
23
2424
RPC – Chamada de Procedimento Remoto Passagem de Parâmetros por Valor
24
2525
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Valor– Quando o servidor terminou, o apêndice de
servidor retorna novamente o controle. Ele pega o resultado devolvido pelo servidor e o empacota em uma mensagem.
– A mensagem retorna ao apêndice de cliente, que a desempacota para extrair o resultado e retorna o valor para o procedimento de cliente à espera.
25
2626
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Valor Contanto que as máquinas do cliente e do
servidor sejam idênticas e que todos os parâmetros e resultados sejam tipos escalares, como inteiros, caracteres e booleanos, tudo funcionará bem, mas...– Problemas:
» Representação diferentes para caracteres (EBCDIC-mainframes IBM e ASCII-PCs IBM).
» Ordenação de bytes: Intel Pentium da direita para esquerda (little endian), mas Sun SPARC da esquerda para a direita (big endian), remetendo “As viagens de Gulliver” na questão de como quebrar ovos...
26
2727
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Valor– Problemas:
(a)Mensagem original no Pentium
(b)Mensagem após recebimento na SPARC
(c)Mensagem após inversão
27
2828
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Valor– Ou temos JILL e 83.886.080 (5 x 224) como em
(b) ou temos 5 e LLIJ como em (c).– Ou seja, sem informações adicionais sobre o
que é uma string e o que é um número o dano será irreversível.
– Solução: Cliente diz seu tipo e a conversão feita pelo servidor se tipos forem diferentes.
28
2929
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Referência– Como passar ponteiros?
» Na verdade, o que se quis perguntar é como passar valores por referência, pois os ponteiros nada mais são do que endereços de outras variáveis quaisquer.
29
3030
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Referência– Problema: um ponteiro é significativo somente
dentro do espaço de endereço do processo no qual está sendo usado!» Na verdade, esse nem chega a ser um
problema, retomemos o exemplo da função em C.count = read(fd, buffer, nbytes);
» Lembrando que há um arquivo associado a fd, que o número de caracteres é indicado por nbytes, e ainda que o valor retorna ára string buffer, vamos adotar que 1000 seja o endereço de buffer no cliente. Ora, não podemos esperar que 1000 venha a ser usado no servidor, pois esse endereço poderia estar bem no meio de um programa em execução! 30
3131
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Referência– Mecanismo de passagem de parâmetro →
copiar/restaurar.– Variável é copiada na pilha do cliente
(passagem de parâmetro por valor). O apêndice cliente copia o vetor para a mensagem e o envia ao servidor.
– Variável é manipulada no servidor. O apêndice de servidor pode chamar o servidor como um ponteiro para esse vetor, ainda que esse ponteiro tenha um valor numérico distinto do que consta foi fornecido pelo cliente.
– Valor de retorno sobre-escreve o valor original na pilha do cliente, pelo apêndice cliente findando o processo.
31
3232
RPC – Chamada de Procedimento Remoto
Passagem de Parâmetros por Referência– No caso do read, stub do cliente “sabe” que o
segundo parâmetro aponta para um conjunto de caracteres
– Suponha que o cliente saiba o tamanho do vetor.» Solução:
1. Copiar o vetor para a mensagem e enviar ao servidor.
2. Stub do servidor, chama o servidor com um ponteiro para este vetor.
3. Modificação feita pelo servidor e armazenada diretamente no vetor que esta no stub.
4. Ao enviar o vetor de volta ao stub do cliente, o vetor é copiado de volta ao cliente.
32
3333
RPC – Chamada de Procedimento Remoto
RPC – Linguagem de Programação de Interface - IDL– Interface consiste em um conjunto de
procedimentos que podem ser chamados por um cliente e que são implementados por um servidor.
– Utilização de interface simplifica consideravelmente aplicações cliente-servidor baseadas em RPCs.
– Gerar completamente stubs de cliente e servidor - todos os sistemas de middleware baseados em RPC oferecem uma IDL para suportar desenvolvimento de aplicação.
33
3434
RPC – Chamada de Procedimento Remoto
Em Resumo...– Permite a um cliente o acesso a um serviço
remoto por meio de uma simples chamada a um procedimento local.
– Possibilita que programas clientes sejam escritos de modo simples.
– Pode localizar automaticamente o servidor correto.
– Estabelece a comunicação entre software cliente e software servidor.
34
3535
Copyright © 2010 Prof. Jorge Surian
Todos direitos reservados. Reprodução ou divulgação total ou parcial deste documento é expressamente proíbido sem o consentimento formal, por escrito, do Professor Surian.
Fonte:
Tanenbaum, Andrew S. e Steen, Marteen Van. Sistemas Distribuídos, São Paulo: Prentice Hall, 2008.