Você está na página 1de 24

Sistemas Distribudos

Chamada remota de procedimentos


(RPC)
Universidade Federal do Rio de Janeiro
Departamento de Cincia da Computao - IM

Diego Tertuliano 112080300


Erick Pires
112024142
Vtor Trindade
112051644

Cliente-Servidor

Distribuio vertical

Distribui a funcionalidade de um servidor


em multiplos servidores.
O primeiro servidor responde a
requisio do cliente e durante o
processamento pode requerer servios
de outros servidores (um servidor se
torna cliente de outros).
A carga de processamento em cada
servidor e diminuda.
Servidores podem ser modificados,
desde que a interface permanea a
mesma.

Distribuio horizontal

Envolve replicar funcionalidade de um


servidor em mltiplos computadores.
Reduz a carga em servidores individuais.
Prov redundncia.

Peer-to-Peer
A arquitetura P2P assume que
todos os processos tem o mesmo
papel e portanto so pares uns dos
outros.
Se muitos ns participam da rede
P2P, praticamente impossvel para
um n guardar informao sobre
todos os demais ns da rede.
Para resolver esse problema, uma
rede de sobreposio (rede lgica)
criada entre alguns ns da rede.

Comunicao entre processos (na mesma mquina)


H duas principais razes para processos se comunicarem:

Sincronizao.
Compartilhamento de dados.

As abordagens para comunicao so:

Memria compartilhada.
Threads do mesmo processo.
Processos com uma regio de memria compartilhada.
Processos compartilhando um recurso em comum (como um arquivo).
Troca de mensagem.

Geralmente depende de algum mecanismo provido pelo sistema operacional (como


sockets e pipes).

Comunicao entre processos (em sistemas distribudos)


Processos em computadores separados no podem acessar fisicamente a
memria um do outro.
Processos em um sistema distribudo ainda podem se comunicar atravs de
troca de mensagens ou memria compartilhada.

Distributed Shared Memory


A ideia por trs da DSM que todos processos em computadores separados
tm acesso ao mesmo espao de endereamento virtual.
As pginas de memria desse espao de endereamento na verdade esto
em computadores separados.
Sempre que um processo precisa acessar uma pgina em particular, ele deve
achar o computador que o host real daquela pgina e requisitar os dados
dela.

Abstrao de comunicao
Nem sempre fcil escrever um programa correto utilizando troca explcita de
mensagens.
Algumas abstraes tentam esconder completamente a comunicao.
Enquanto outras abstraes no tentam esconder a comunicao, mas
esconde os detalhes da comunicao.
Essas abstraes so utilizadas como base para a maioria dos sistemas
middleware.

Chamada Remota de Procedimentos (RPC)

A ideia da chamada remota de


procedimentos substituir o modelo
de mensagens explcitas pelo modelo
de chamada de um procedimento em
um n remoto.
Ao utilizar RPC, um programador
simplesmente chama um
procedimento, enquanto a
transferncia de mensagens acontece
ao fundo.

1.
2.
3.
4.
5.

6.

7.
8.
9.
10.
11.

o cliente chama uma rotina esboo.


a rotina esboo empacota os parmetros em
uma mensagem.
a rotina esboo executa uma chamada do
sistema para enviar a mensagem.
o kernel do cliente transfere a mensagem para
o kernel remoto.
o kernel remoto entrega para a rotina esboo
do servidor, que est bloqueada em um
receive()
a rotina esboo do servidor desempacota a
mensagem, chama a funo de servio(uma
chamada normal de funo)
a funo de servio retorna para o esboo,que
empacota o resultado em uma mensagem
o esboo do servidor realiza um send()
o kernel entrega para o esboo do cliente
o esboo do cliente desempacota resultado
o esboo do cliente retorna para o programa do
cliente (um retorno normal de funo)

Marshalling e Unmarshalling
Marshalling o empacotamento dos dados feito pelo cdigo esboo no
cliente antes de ser enviado, unmarshalling o desempacotamento.
essencial que o servidor saiba o formato do marshalling para poder
recuperar os dados.
Por isso, importante que se defina o formato padro da rede.

Representao de dados
Os clientes e servidores muitas vezes rodam em sistemas diferentes e at em
linguagens diferentes.
Isso gera um problema de que a representao de dados pode no ser
uniforme atravs dos sistemas (ou at mesmo em relao a rede).

Little-endian vs big-endian.
Tamanho de palavras

A soluo todos os processos utilizarem a mesma representao, fazendo


converses para a sua representao interna.

Ponteiros
Como ponteiros s fazem sentido para a sua mquina, alguma estratgia precisa
ser tomada para serem compatveis com RPC
1. Serializar as estruturas de dados baseadas em ponteiros antes de envi-las.
Ou
2. Enviar uma mensagem para o cliente toda vez que um ponteiro for encontrado
no servidor.

Sncrono ou assncrono
Geralmente a abstrao RPC assume comunicao bloqueante.
Esse o comportamento padro, j que clientes chamando procedimentos
RPC por ficam bloqueados at que o procedimento termine de executar e
responda com o retorno.
Porm, h casos em que o comportamento bloqueante no desejado.

Anlogo a criao de uma thread.


O cliente deve eventualmente esperar pelo retorno (anlogo a um join).

Acoplagem de servios
Um cliente precisa saber a quem enviar uma mensagem RPC.
Essa informao obtida atravs de um servio que permita o registro e
busca de servios (um servio de acoplagem).
Um servio de acoplagem geralmente disponibiliza uma interface como a
seguinte:

register(name, version, handle, UID)


deregister(name, version, UID)
lookup(name, version) (handle, UID)

handle um endereo e UID serve para distinguir servios rodando no


mesmo servidor.

Protocolo de transporte
Qual protocolo utilizar para transmitir as mensagens RPC?

TCP

Entrega confivel.
O overhead adicional pode ser significativo.

UDP

Mais leve.
A aplicao cliente deve manter um temporizador e reenviar a mensagem caso a
resposta no chegue antes do temporizador zerar.

E se chamadas diferentes produzirem respostas diferentes?

Interface Definition Language


Um servidor que prov servios de chamada remota de procedimentos
definem uma interface de servios disponveis.
Uma interface de servios geralmente definida em uma linguagem de
definio de interface (IDL). Uma linguagem de programao simplificada,
suficiente para definir apenas estruturas de dados e assinatura de
procedimentos.
A IDL utilizada para gerar (muitas vezes automaticamente) o cdigo para as
rotinas de esboo para o cliente e o servidor.

Frameworks conhecidos
O primeiro framework amplamente utilizado foi o Open Network Computing
Remote Procedure Call (ONC RPC), proposto pela Sun Microsystems.

Definido no RFC1050 e atualizado no RFC1831.


Utiliza XDR (External Data Representation) (RFC1014 e RFC4506) para representao de dados.
Bastante utilizado em servios desenvolvidos pela Sun, como o NFS (Network File System).

Outro framework popular o Distributed Computing Environment DCE/RPC,


que foi adotado pela Microsoft (MSRPC) como base para seu sistema de
computao distribuda (disponvel no Windows NT).
Frameworks atuais utilizam XML para representao de dados e rodam sobre
protocolos de Internet amplamente utilizados, como o HTTP.

Facilita a integrao com servidores Web.


Permite operao transparente atravs de um Firewall.

Sun/ONC RPC
Interface Definition Language (IDL) de acordo com o formato Sun/ONC.
Um arquivo idl (sufixo .x) descreve definies de estruturas e funes remotas.
Um grupo de funes remotas so agrupadas em uma verso.
Uma ou mais verses so agrupadas em um programa.

IDL - ONC RPC


struct estrutura {
variavel v_1;
variavel v_2<>;
...
};

program PROGRAMA {
version VERSAO {
tipo_retorno FUNCAO(estrutura) = ID_FUNO;
} = ID_VERSO;
} = ENDEREO; (0x00000000 ~ 0x1fffffff)

RPCGEN
A ferramenta rpcgen gera mdulos de interface de programas remotos,
compilando o arquivo fonte IDL na linguagem ONC RPC para C.
A sada padro do rpcgen :

Um arquivo header (.h) com definies comuns ao servidor e cliente;


Um conjunto de rotinas XDR para traduzir cada tipo de dados definidos no arquivo .h;
Um programa esboo para o servidor;
Um programa esboo para o cliente.

Tutorial RPCGEN - Calculadora


Link: dontpad.com/rpc
Na pasta selecionada, executar no terminal: rpcgen -a calc.x
Terminar implementaes do esboo "calc_client.c" e "calc_server.c"

Gabarito calculadora
dontpad.com/gabaritocalculadorarpc

Obrigado!
Dvidas?