Sistemas Distribuídos: Comunicação (RPC)

Download Report

Transcript Sistemas Distribuídos: Comunicação (RPC)

Sistemas Distribuídos
Jorge Surian
[email protected]
Sistemas Distribuídos: Comunicação (RPC)
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
2
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
3
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
4
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
5
RPC – Chamada de Procedimento Remoto
 Entendendo o funcionamento...
6
6
RPC – Chamada de Procedimento Remoto
 Entendendo o funcionamento...
7
7
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
8
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
9
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
10
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
11
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
12
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
13
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
14
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
15
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
16
RPC – Chamada de Procedimento Remoto
 Apêndices
17
17
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
18
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
19
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
20
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
21
RPC – Chamada de Procedimento Remoto
 Passagem de Parâmetros por Valor
22
22
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
23
RPC – Chamada de Procedimento Remoto
 Passagem de Parâmetros por Valor
24
24
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
25
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
26
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
27
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
28
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
29
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
30
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
31
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
32
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
33
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
34
Fonte:
Tanenbaum, Andrew S. e Steen, Marteen Van. Sistemas Distribuídos, São
Paulo: Prentice Hall, 2008.
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.
35
35