capítulo3: chamadas de procedimentos remotosdisciplinas.ist.utl.pt/leic-sod/2008-2009/teoricas/3 -...

36
1 Departamento de Engenharia Informática 2009 José Alves Marques 1 Capítulo 3: Chamadas de Procedimentos Remotos Departamento de Engenharia Informática 2009 José Alves Marques 2 Chamada de Procedimentos Remotos – RPC - Remote Procedure Call Modelo de programação da comunicação num sistema cliente-servidor Obvia as limitações referidas • Objectivo: Estruturar a programação distribuída com base na chamada pelos clientes de procedimentos que se executam remotamente no servidor

Upload: doankhuong

Post on 02-Oct-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

1

Departamento de Engenharia Informática

2009 José Alves Marques 1

Capítulo 3: Chamadas de ProcedimentosRemotos

Departamento de Engenharia Informática

2009 José Alves Marques 2

Chamada de Procedimentos Remotos – RPC -Remote Procedure Call

• Modelo de programação da comunicação num sistema cliente-servidor

• Obvia as limitações referidas

• Objectivo:

Estruturar a programação distribuída com base na chamada pelos clientes de procedimentos que se executam remotamente no servidor

2

Departamento de Engenharia Informática

2009 José Alves Marques 3

Chamada de um Procedimento Remoto

• Execução de um procedimento noutro processo� O chamador (cliente) envia uma mensagem com um pedido O chamado (servidor) devolve uma mensagem com a resposta

• O programador chama um procedimento local normal– O envio e recepção de mensagens são escondidos

r = serverFunc ( p1, p2 );

r_type

serverFunc ( p_type p1, p_type p2 )

{

}

cliente servidor

Departamento de Engenharia Informática

2009 José Alves Marques 4

RPC: Fluxo de execução

CLIENTE SERVIDOR

Cliente bloqueado

Bloqueia-se

Chamada ao procedimento remoto:

envio dos parâmetros

Execução do

procedimento

pedido

Retoma a execuçãoRetorno do procedimento remoto:

devolução dos resultados

3

Departamento de Engenharia Informática

2009 José Alves Marques 5

RPC: Benefícios

• Adequa-se ao fluxo de execução das aplicações– Chamada síncrona de funções

• Simplifica tarefas fastidiosas e delicadas– Construção e análise de mensagens– Heterogeneidade de representações de dados

• Esconde diversos detalhes do transporte– Endereçamento do servidor– Envio e recepção de mensagens– Tratamento de erros

• Simplifica a divulgação de serviços (servidores)– A interface dos serviços é fácil de documentar e apresentar– A interface é independente dos protocolos de transporte

Departamento de Engenharia Informática

2009 José Alves Marques 6

RPC: comparação com Mensagens

Positivo Negativo�A interface do serviço encontra-se claramente especificada e não é apenas um conjunto de mensagens

� Mecanismo de estabelecimento da ligação entre o cliente e o servidor é automatizado através do serviço de nomes e rotinas do run-time de suporte ao RPC

�As funções do cliente e do servidor são consistentes, o sistema garante que são correctamente emparelhadas

� O modelo de invocação de uma função e respectiva sincronização simplificam a programação

� Os dados são automaticamente codificados e descodificados resolvendo o problema da heterogeneidade

�As excepções adaptam-se bem ao tratamento de erros nas invocações remotas

• Só são bem suportadas as interacções 1-para-1 (ou seja não suporta difusão)

• Existem mais níveis de software que implicam maior overhead na execução

4

Departamento de Engenharia Informática

2009 José Alves Marques 7

RPC: Rotinas de adaptação (stubs)(também chamados ties do lado do servidor)

• Cliente– Conversão de parâmetros– Criação e envio de mensagens

(pedidos)– Recepção e análise de mensagens

(respostas)– Conversão de resultados

• Servidor– Recepção e análise de

mensagens (pedidos)– Conversão de parâmetros– Conversão de resultados– Criação e envio de mensagens

(respostas)

serverFunc ( … );

serverFunc ( … )

{

}

servidorclientStub ( … )

{

}

cliente

serverStub ( … )

{

}

Departamento de Engenharia Informática

2009 José Alves Marques 8

Run-Time LibraryRun-Time Library

Arquitectura do sistema de RPC:Blocos funcionais das aplicações

Código do cliente

stubs

Run-Time LibraryRun-Time Library

transporteThreads

Código do servidor

stubs

(ou ties)

transporteProtocolo de

transporte

Protocolo de

transporte

Protocolo desessão

Protocolo desessão

Protocolo deapresentaçãoProtocolo deapresentação

Threads

5

Departamento de Engenharia Informática

Arquitectura

• As Rotinas de Adaptação – Stubs– Efectuam as conversões de envio e recepção dos parâmetros da Chamada

Remota– Cada rotina tem os seus parâmetros específicos pelo que cada uma tem um

stub– Do lado do servidor existe um stub ou tie que executa as mesmas conversões

pela ordem inversa

• Função de despacho do servidor– Espera por mensagens de clientes num porto de transporte– Envia mensagens recebidas para o stub respectivo– Recebe mensagens dos stubs e envia-os para os clientes

• O Sistema de Suporte – Run-time system– Executa as operações genéricas do RPC, por exemplo: Abrir a ligação com o

servidor, efectuar o envio e recepção das mensagens, fechar ligação – Como são operações genéricas existe apenas um RTS por cliente e um por

servidor

2009 José Alves Marques 9

Departamento de Engenharia Informática

LINGUAGEM DE DESCRIÇÃO DE INTERFACES - IDL

A Visão da Programação do RPC

2009 José Alves Marques 10

6

Departamento de Engenharia Informática

2009 José Alves Marques 11

RPC IDL: Características

• Linguagem própria– Linguagem declarativa (não tem a parte operacional das

linguagens de programação)

• permite definir– Tipos de dados

– Protótipos de funções• Fluxo de valores (IN, OUT, INOUT)

– Interfaces• Conjuntos de funções

Departamento de Engenharia Informática

2009 José Alves Marques 12

RPC IDL: Código gerado pelo compilador

• Stubs– Para o cliente

• Traduzem e empacotam parâmetros numa mensagem• Enviam a mensagem para o servidor, esperam uma resposta• Desempacotam a mensagem e traduzem a resposta

– Para o servidor• Desempacotam a mensagem e traduzem os parâmetros• Invocam a função desejada e esperam pelo seu retorno• Traduzem e empacotam a resposta numa mensagem

• Função de despacho do servidor– Espera por mensagens de clientes num porto de transporte– Envia mensagens recebidas para o stub respectivo– Recebe mensagens dos stubs e envia-os para os clientes

7

Departamento de Engenharia Informática

2009 José Alves Marques 13

IDL: Pode ser um “.h”?

• Quais os parâmetros de entrada/saída da seguinte função?

int transfere(int origem, int destino,

int valor, int *saldo, char *descr);

Departamento de Engenharia Informática

2009 José Alves Marques 14

RPC IDL: Limitações usuais

• Ambiguidades acerca dos dados a transmitir:– Endereçamento puro de memória (void *)– Flexibilidade no uso de ponteiros para manipular vectores

• Passagem de vectores (normalmente por ponteiro)• Strings manipuladas com char *

– Passagem de variáveis por referência (&var)• Semânticas ambíguas

– Valores booleanos do C (0 � False; != 0 � True)• Problemas complexos (durante a execução)

– Transmissão de estruturas dinâmicas com ciclos– Integridade referencial dos dados enviados

8

Departamento de Engenharia Informática

2009 José Alves Marques 16

RPC IDL: Soluções para alguns dos problemas

• Novos tipos de dados próprios do IDL– Sun RPC define 3 novos

• string: para definir cadeias de caracteres

• bool: valor booleano, apenas dois valores

• opaque: bit-arrays, sem tradução

• Agregados próprios do IDL– Uniões (unions) com descriminantes

– Vectores conformes (DCE/Microsoft)

– Vectores variáveis (Sun, DCE/Microsoft)

Departamento de Engenharia Informática

2009 José Alves Marques 17

Exemplo: IDLSun RPC Ficheiro banco.x

program BANCOPROG {

version BANCOVERS {

criarRet CRIAR(criarIn) = 1;

saldoRet SALDO(int) = 2;

resultado DEPOSITAR(contaEvalor) = 3;

resultado LEVANTAR(contaEvalor) = 4;

resultado TRANSFERIR(transferirIn) = 5;

pedirExtratoRet PEDIREXTRATO(pedirExtratoIn) = 6;

} = 1;

} = 0x20000005;

9

Departamento de Engenharia Informática

2009 José Alves Marques 18

Exemplo: Interface em IDL RPC Microsoft

[uuid(00918A0C-4D50-1C17-9BB3-92C1040B0000),version(1.0)]interface banco{typedef enum { SUCESSO, ERRO, ERRO_NA_CRIACAO, CONTA_INEXISTENTE, FUNDOS_INSUFICIENTES } resultado;

typedef enum { CRIACAO, SALDO, DEPOSITO, LEVANTAMENTO, TRANSFERENCIA, EXTRATO } tipoOperacao;

typedef struct { long dia; long mes; long ano; } tipoData;

typedef struct { tipoData data; tipoOperacao operacao; long movimento; long saldo; } dadosOperacao;

resultado criar([in] handle_t h,[in] long valor,[in, string] char nome[],[in, string] char morada[],[out] long *numero);

resultado saldo([in] handle_t h,[in] long nConta,[out] long *valor);

resultado depositar([in] handle_t h,[in] long nConta,[in] long valor);

resultado levantar([in] handle_t h,[in] long nConta,[in] long valor);

resultado transferir([in] handle_t h,[in] long nContaOrigem,[in] long nContaDest,[in] long valor);

resultado pedirExtrato([in] handle_t h,[in] long nConta,[in] long mes,[in] long ano,[in, out, ptr] dadosOperacao dados[50],[out] long *nElemento);

Departamento de Engenharia Informática

HETEROGENEIDADE E NOMES

Protocolos e Serviços necessário para suportar o RPC

2009 José Alves Marques 19

10

Departamento de Engenharia Informática

2009 José Alves Marques 20

Heterogeneidade

• Nos sistemas distribuídos a heterogeneidade é a regra

• Os formatos de dados são diferentes– Nos processadores (ex.: little endian, big endian, apontadores)

– Nas estruturas de dados geradas pelos compiladores

– Nos sistemas de armazenamento

– Nos sistemas de codificação

• As mensagens entre as máquinas enviam tipos básicos do RPC (caracteres, inteiros, reais, etc) ou tipos agregados.

• As redes transmitem bytes entre as máquinas.

• É necessário traduzir tipos das mensagens para bytes.– De forma a suportar heterogeneidade entre emissor e receptor

Departamento de Engenharia Informática

2009 José Alves Marques 21

Resolução da Heterogeneidade na Comunicação

• Modelo OSI � camada de Apresentação– Protocolo ASN.1

• Sistemas de RPC � aproveitam descrição formal da interface– heterogeneidade resolvida através de técnicas de

compilação.

• A partir destes sistemas a heterogeneidade na comunicação ficou resolvida no ambiente de execução.

11

Departamento de Engenharia Informática

2009 José Alves Marques 22

Protocolos de Apresentação no RPC

• Decisões a efectuar– Estrutura dos mensagens

• Implícita – as mensagens apenas contêm os dados a transmitir• Explicita – Auto-descritiva (marcada, tagged)

– Políticas de conversão dos dados• Canónica – Uma única representação para que todos convertem

☺N formatos ⇒ N funções☺Não há comportamentos variáveis�É preciso converter mesmo quando é inútil

• O-receptor-converte (Receiver-makes-it-right)☺Poupa conversões inúteis�N formatos ⇒ N x N funções

Departamento de Engenharia Informática

2009 José Alves Marques 23

Protocolos de Apresentação

XDR

(eXternal Data Representation)

NDR

(Network Data Representation)

ASN.1

(Abstract Syntax Notation)

XML

Extensible Markup

Language

Sun RPC DCE RPC

Microsoft RPC

OSI W3C

Conversão Canónica O-receptor-converte Canónica Canónica

Estrutura das mensagens

Implícita

Comprimentos de vectores variáveis

Alinhamento a 32 bits

(excepto vectores de caracteres)

Implícita

Marcas arquitecturais

(architecture tags)

Explícita - Tagged

Encoding Rules:

Basic (BER)

Distinguished (DER)

Canonical (CER)

Packed (PER)

Explicita – Tagged

Tipos de Documentos

DTD

XML schema

12

Departamento de Engenharia Informática

LIGAÇÃO OU BINDINGLigação entre o Cliente e o Servidor

2009 José Alves Marques 24

Departamento de Engenharia Informática

2009 José Alves Marques 25

RPC: Serviço de Nomes

• Permite que o servidor registe um nome de um serviço– Que tem de estar associado ao identificador de um porto de transporte

• Permite que um cliente consiga encontrar o servidor através do nome do serviço.– Obter o nome do seu porto de transporte

cliente servidorN1

registoprocura

N1

N2

Serviçode Nomes

13

Departamento de Engenharia Informática

2009 José Alves Marques 26

O binding tem de ser efectuado pelo cliente

• Estabelecimento da sessão - ligação ao servidor (binding)– Localização do servidor

– Autenticação do cliente e/ou do servidor

– Estabelecimento de um canal de transporte

{Chamada de procedimentos remotos}* - efectua os RPC necessários

• Terminação da sessão– Eliminação do canal de transporte

Departamento de Engenharia Informática

2009 José Alves Marques 27

O registo tem de ser efectuado peloservidor

• Registo– Escolha da identificação do utilizador

• Nome do porto de transporte• Outros nomes alternativos

– Registo dessa identificação• {Esperar por pedidos de criação de sessões}*

– Estabelecimento de um canal de transporte– Autenticação do cliente e/ou do servidor

• {Esperar por invocações de procedimentos}*– Enviados pelos clientes ligados

• Terminação da sessão– Eliminação do canal de transporte

14

Departamento de Engenharia Informática

2009 José Alves Marques 29

Referências de sessão – binding handles

• Cliente– Criação do binding handle no extremo cliente

• Identifica um canal de comunicação ou um porto de comunicação para interactuar com o servidor

• Servidor– Possível criação de um binding handle no extremo

servidor• Útil apenas se o servidor desejar manter estado entre diferentes

RPCs do mesmo cliente

• Um servidor sem estado não mantém binding handles

Departamento de Engenharia Informática

2009 José Alves Marques 30

Exemplo Binding : Cliente – Sun RPC

void main (int argc, char *argv[]){

CLIENT *cl;

int a, *result;

char* server;

if (argc < 2) {

fprintf(stderr, "Modo de Utilização: %s máquina do

servidor\n", argv[0]);

exit(1);

}

server = argv[1];

cl = clnt_create(server, BANCOPROG, BANCOVERS, "tcp");

if(cl == NULL) {

clnt_pcreateerror(server);

exit(1);

}

sresult = saldo(nconta, cl);

}

15

Departamento de Engenharia Informática

2009 José Alves Marques 31

Ligação cliente-servidor

• Os binding handles podem ser usados pelos stubs de uma forma– Explícita– Implícita– Automática

Explícito (Sun RPC, DCE RPC) Implícito (DCE RPC) Automático (DCE RPC)

Inicialização do Cliente

Obtém informação de ligação

Usa-a explicitamente em cada RPC

Obtém informação de ligação

Guarda-a numa variável global

(não necessária)

Stub cliente A função de stub tem um parâmetro de entrada que especifica o handle a usar na chamada

Usa a variável global Obtém informação de ligação

Guarda-a localmente e usa-a

Departamento de Engenharia Informática

2009 José Alves Marques 32

RPC: Infra-estrutura de suporte

• No desenvolvimento– Uma linguagem de especificação de interfaces

• Interface Description Language, IDL– Compilador de IDL

• Gerador de stubs

• Na execução– Serviço de Nomes– Biblioteca de suporte à execução do RPC (RPC Run-Time

Support)• Registo de servidores• Binding – protocolo de ligação do cliente ao servidor• Protocolo de controlo da execução de RPCs• Controlo global da interação cliente-servidor

16

Departamento de Engenharia Informática

2009 José Alves Marques 33

Aspectos importantes a analisar

1. Transparência

2. Semântica de Execução1. Protocolo de controlo

3. Multitarefas e RPC

Departamento de Engenharia Informática

2009 José Alves Marques 34

RPC: Entraves à transparência

• IDL– Normalmente diferente da linguagem usada pelos programas

• Passagem de parâmetros– Semânticas não suportadas pelo RPC

• Execução do procedimento remoto– Tolerância a faltas e notificação de faltas

• Desempenho– Depende em grande medida da infra-estrutura de comunicação

entre cliente e servidor

17

Departamento de Engenharia Informática

2009 José Alves Marques 35

Semânticas de execução

• A semântica de execução determina o modelo de recuperação de faltas– Semântica ideal ≡ procedimento local

• Modelo de faltas– Perda, duplicação ou reordenação de mensagens– Falhas no servidor e no cliente– Possibilidade de servidor e cliente re-iniciarem após a falhas

Departamento de Engenharia Informática

2009 José Alves Marques 36

Algumas faltas possíveis

∆t

cliente

servidor

início

reenvio

∆t

cliente

servidor

reenvio

cliente

servidor

início

∆t

reenvio

cliente

servidor

18

Departamento de Engenharia Informática

2009 José Alves Marques 37

Semânticas de execução

• Semânticas– Talvez (maybe)

– Pelo-menos-uma-vez (at-least-once)

– No-máximo-uma-vez (at-most-once)

– Exactamente-uma-vez (exactly-once)

Departamento de Engenharia Informática

2009 José Alves Marques 38

Arquitectura do sistema de RPC:Semânticas de execução

• Semântica talvez– O stub cliente retorna um erro se não receber uma resposta num

prazo limite– Sem uma resposta o cliente não sabe se o pedido foi executado ou

não– Protocolo não tem de se preocupar com duplicações de pedidos

• Semântica pelo-menos-uma-vez– O stub cliente repete o pedido até obter uma resposta– Caso haja uma resposta o cliente tem a garantia que o pedido foi

executado pelo menos uma vez– E se o servidor falha permanentemente?– Para serviços com funções idempotentes

19

Departamento de Engenharia Informática

2009 José Alves Marques 39

Arquitectura do sistema de RPC:Semânticas de execução

• Semântica no-máximo-uma-vez– O protocolo de controlo tem que:

• Identificar os pedidos para detectar repetições no servidor• Manter estado no servidor acerca de que pedidos estão em

curso ou já foram atendidos

• Semântica exactamente-uma-vez– Também implica identificar os pedidos para detectar

repetições– E se for usado um temporizador? Qual a semântica ao

expirar?

Departamento de Engenharia Informática

2009 José Alves Marques 40

Arquitectura do sistema de RPC: Protocolo de controlo

• Suporte de vários protocolos de transporte– Com ligação

• O controlo é mais simples• RPCs potencialmente mais lentos

– Sem ligação• Controlo mais complexo (mais ainda se gerir fragmentação)• RPCs potencialmente mais rápidos

• Emparelhamento de chamadas/respostas– Identificador de chamada (CallID)

• Confirmações (Acks)– Temporizações

• Estado do servidor para garantir semânticas– Tabela com os CallIDs das chamadas em curso– Tabela com pares (CallID, resposta enviada)

20

Departamento de Engenharia Informática

2009 José Alves Marques 41

Protocolo de RPCSituação Ideal

ChamadaEnviar pacote

Esperar ack ou resultado

Retornar

Invocar função

Enviar resultados

Executar função

Retornar

RPC ServidorCall [CallID, procedimento, argumentos]

Resultado[CallID, resultados]

Máquina do Cliente Máquina do Servidor

Utilizador RPC

Apenas são utilizadas duas mensagens

Departamento de Engenharia Informática

2009 José Alves Marques 42

Protocolo de RPC: Situação Complexa

Call[CallID. Pkt=0, pleaseAck, ....]Chamada Enviar call msg Esperar ack

Construir o prox. pacote

Enviar o pacote Esperar ack

Retransmitir Esperar ack

Esperar resultado

Retornar

Confirmar

Utilizador RPC

Máquina Cliente Máquina do Servidor

memorizar a msg

Confirmar Esperar pelo

próximo pacote

Chamar a função

Confirmar

Enviar resultado Esperar ack

Retransmitir Esperar ack

Executar função

Retornar

RPC Servidor

Ack[CallID, Pkt=0]

Data[CallID, Pkt=1, dontAck, ...]

Ack[CallID, Pkt=1]

Result[CallID, Pkt=2, dontAck, ...]

Result[CallID, Pkt=2, pleaseAck, ...]

Ack[CallID, Pkt=2]

Data[CallID, Pkt=1, pleaseAck, ...]

21

Departamento de Engenharia Informática

2009 José Alves Marques 43

Execução de RPCs:(i) Fluxos de execução simples

• Servidores– Um pedido de cada vez

• Serialização de pedidos• Uma única thread para todos os pedidos

– Vários pedidos em paralelo• Uma thread por pedido• A biblioteca de RPC tem que suportar

paralelismo:– Sincronização no acesso a binding handles

– Sincronização no acesso a canais de comunicação

Departamento de Engenharia Informática

2009 José Alves Marques 44

Execução de RPCs:(ii) Fluxos de execução simples

• Clientes– Um pedido de cada vez– Vários pedidos em paralelo

• Uma thread por pedido• A biblioteca de RPC tem que suportar paralelismo:

– Sincronização no acesso a binding handles

– Sincronização no acesso a canais de comunicação

22

Departamento de Engenharia Informática

2009 José Alves Marques 45

Execução de RPCs:(iii) Fluxos de execução complexos

• Chamadas em ricochete (callbacks)– Um “cliente” é contactado como sendo um “servidor”

no fluxo da sua chamada

“cliente” “servidor”

mesma thread

mesma threadou

threads diferentes?

mesmo CallID base

Departamento de Engenharia Informática

2009 José Alves Marques 46

Execução de RPCs:(iv) Fluxos de execução alternativos

• Chamadas assíncronas (follow-up RPC)

– Duas operações não consecutivas:• Lançamento• Recuperação

– Permitem optimizar os clientes• Menos tempo bloqueado• Transparente para os servidores

– Podem simplificar a realização de RPC concorrentes

CLIENTE SERVIDOR

Lançamento

Recuperação

CLIENTE SERVIDOR

Lançamento

Recuperação

23

Departamento de Engenharia Informática

2009 José Alves Marques 47

Execução de RPCs:(v) Fluxos de execução alternativos

• Chamadas sem retorno (one-way operation)– Equivalente a uma chamada assíncrona sem recuperação

– São definidas na interface dos serviços• Afecta todos os clientes (ex. atributo maybe no DCE IDL)

– Não permitem retornar resultados• Porque não há qualquer mensagem de resposta

– Semânticas limitadas• Talvez

– Algumas falhas podem ser detectadas pelos clientes• Erros de transmissão locais

Departamento de Engenharia Informática

2009 José Alves Marques 48

Execução de RPCs:(vi) Fluxos de execução alternativos

• RPCs locais (numa única máquina)– Podem-se simplificar ou optimizar várias acções

protocolares

– Simplificações:• Eliminação dos protocolos de apresentação

– Optimizações:• Partilha de tampões para troca de mensagens

• Diminuição de cópias de dados

– A maioria dos RPCs de uso genérico não optimizam significativamente

24

Departamento de Engenharia Informática

2009 José Alves Marques 49

Execução de RPCs:(vii) Fluxos de execução alternativos

• RPC em difusão (broadcast)– Questões técnicas e semânticas

• Qual a abrangência da difusão?• Como se processa o estabelecimento da ligação?• Qual o suporte de transporte à difusão?• Qual a política de envio e recolha de respostas?

Departamento de Engenharia Informática

2009 José Alves Marques 50

Execução de RPCs:Desempenho

• Influência da aplicação– Ligação (autenticação, etc.)– Dimensão dos parâmetros e resultados– Protocolo de transporte escolhido– Execução do pedido

• Influência da infra-estrutura– Rede

• Largura de banda, congestão, latência

– Máquinas cliente e servidora• Velocidade, carga

25

Departamento de Engenharia Informática

RPC - EXEMPLOSExemplos de RPC existentes no mercado

2009 José Alves Marques 51

Departamento de Engenharia Informática

Exemplos de RPCs

• ONC RPC (ex- Sun RPC)RFC 1831 (RPC: Remote Procedure Call Protocol Specification)RFC 1832 (XDR: External Data Representation Standard)RFC 1833 (RPC: Binding Protocols)

• DCE RPC– CAE Specification C706 (DCE 1.1: Remote Procedure Call)

• Microsoft RPC– Compatível com o DCE RPC (definição de interfaces, protocolos)– Suporta extensões próprias

2009 José Alves Marques 52

26

Departamento de Engenharia Informática

2009 José Alves Marques 53

SUN RPC

• Sistema de RPC desenvolvido pela SUN cerca de 1985• Destinado inicialmente a suportar o sistema de ficheiros

distribuído NFS• Especificação de domínio público• Implementação simples e muito divulgada em grande

número de plataformas (Unix, MS-DOS, …)

Departamento de Engenharia Informática

2009 José Alves Marques 54

Objectivos

Máquina A

Aplicação cliente

Socket TCP ou UDPSocket TCP ou UDP

Máquina B

pedido resposta

RPC stubs

funcX(args);

Aplicação servidora

Socket TCP ou UDPSocket TCP ou UDP

pedido resposta

RPC stubs + dispatcher

funcX(args);

co

nn

ect

Kernel Kernel

27

Departamento de Engenharia Informática

2009 José Alves Marques 55

SUN RPC

• Linguagem de IDL semelhante a C, suportada pelo compilador rpcgen– Apenas um parâmetro de entrada e um parâmetro de saída– Vários valores são transferidos em estruturas– Construção que permite transmitir condicionalmente informação– Todos os parâmetros são passados por referência para os stubs

• rpcgen gera automaticamente o programa principal do servidor

• Biblioteca de RPC inicialmente usava sockets, actualmente usa TLI

Departamento de Engenharia Informática

2009 José Alves Marques 56

Sun RPC:Exemplo de IDL

• Identificação (nomes)– Interface � (n° programa, n° versão)

(300030, 1)

– Função � (Interface, n° função)(300030, 1, 5)

program BINOP {

version BINOP_VERS {

long BINOP_ADD ( struct input_args ) = 5;

} = 1;

} = 300030;

struct input_args {

long a;

long b;

};

28

Departamento de Engenharia Informática

2009 José Alves Marques 57

Servidor

Sun RPC:Serviço de Nomes e encaminhamento de RPCs

Máquina A

cliente

Máquina B

servidor

rpcbind

Cliente

stub

stub

call (binding handle n° interface,n° função,parâmetros) transporte

porto 111porto de transporte

registo (n° interface, porto de transporte)

procura (n° interface, transporte)

despachoda

interfaceoperação

XID (op. id)

RPC version

n° interface

n° função

autenticador

parâmetros

XID

RPC error

resultados

pedido resposta

Departamento de Engenharia Informática

2009 José Alves Marques 60

Diagrama de ficheiros

Makefile

SampleMakefile

calc_clnt.ccalc_clnt.c

Clientstubs

calc_srv.c

Serverstubs &

dispatcher

calc.h

Definições

Protótipos

Definições

Tipos

Protótipos

Clientsource files

Serversource files

calc.x

ServiceInterface

rpcgen

calc_xdr.c

marshalingXDR

marshaling

#include

29

Departamento de Engenharia Informática

2009 José Alves Marques 61

rpcgen: definição e compilação da interface

calc.x

calc_clnt.ccalc_clnt.c calc_svc.c calc_xdr.c

Sample client

Sample server

SampleMakefile

rpcgen -C

rpcgen -Sc rpcgen -Ss rpcgen -Sm

enum calc_error {CALC_OK = 0, /* No error */CALC_ZERO_DIV = 1 /* Division by zero */

};

struct calc_args {double v1;double v2;

};

struct calc_result {calc_error error;double value;

};

program CALC_PROG {version CALC_VERS {

calc_result SUM(calc_args) = 1;calc_result SUB(calc_args) = 2;calc_result MUL(calc_args) = 3;calc_result DIV(calc_args) = 4;

} = 1;} = 100400;

Departamento de Engenharia Informática

2009 José Alves Marques 62

Diagrama de ficheiros (cont.)

,...)calc_result ∗∗∗∗sum_1(calc_args ∗∗∗∗,...){...}

calc_srv.cmain(...){ ...

svc_run();}calc_prog_1(...){...}

calc.h

,...);

typedef ... calc_result;typedef ... calc_args;calc_result ∗∗∗∗sum_1(calc_args ∗∗∗∗,...);calc_result ∗∗∗∗sum_1_svc(calc_args ∗∗∗∗,...);

calc.xcalc_resultsum(calc_args)...VERSION=1

rpcgen -C

,...)calc_result ∗∗∗∗sum_1_svc(calc_args ∗∗∗∗,...){...}

main(...){...}

calc_clnt.ccalc_clnt.c

calc_xdr.c()xdr_calc_result()

{...}xdr_calc_args(){...}

30

Departamento de Engenharia Informática

2009 José Alves Marques 63

Funções de conversão via XDR

calc.xenum calc_error {

CALC_OK = 0, /* No error */

CALC_ZERO_DIV = 1 /* Div. by zero */

};

struct calc_args {

double v1;

double v2;

};

struct calc_result {

calc_error error;

double value;

};

program CALC_PROG {

version CALC_VERS {

calc_result SUM(calc_args) = 1;

calc_result SUB(calc_args) = 2;

calc_result MUL(calc_args) = 3;

calc_result DIV(calc_args) = 4;

} = 1;

} = 100400;

calc_xdr.ccalc_xdr.c#include "calc.h”

bool_t

xdr_calc_error(XDR *xdrs, calc_error *objp)

{

if (!xdr_enum(xdrs, (enum_t *)objp))

return (FALSE);

return (TRUE);

}

bool_t

xdr_calc_args(XDR *xdrs, calc_args *objp)

{...}

bool_t

xdr_calc_result(XDR *xdrs, calc_result *objp)

{

if (!xdr_calc_error(xdrs, &objp->error))

return (FALSE);

if (!xdr_double(xdrs, &objp->value))

return (FALSE);

return (TRUE);

}

rpcgen -C

Departamento de Engenharia Informática

2009 José Alves Marques 64

Funções do cliente (stubs)

calc.xenum calc_error {

CALC_OK = 0, /* No error */

CALC_ZERO_DIV = 1 /* Division by zero */

};

struct calc_args {

double v1;

double v2;

};

struct calc_result {

calc_error error;

double value;

};

program CALC_PROG {

version CALC_VERS {

calc_result SUM(calc_args) = 1;

calc_result SUB(calc_args) = 2;

calc_result MUL(calc_args) = 3;

calc_result DIV(calc_args) = 4;

} = 1;

} = 100400;

calc_clnt.ccalc_clnt.c#include "calc.h”

static struct timeval TIMEOUT = { 25, 0 };

, &clnt_res,

TIMEOUT) != RPC_SUCCESS) {

}

}

}

#include "calc.h”

static struct timeval TIMEOUT = { 25, 0 };

calc_result *

sum_1(calc_args *argp, CLIENT *clnt)

{

static calc_result clnt_res;

if (clnt_call(clnt, SUM,

xdr_calc_args, argp,

xdr_calc_result, &clnt_res,

TIMEOUT) != RPC_SUCCESS) {

return (NULL);

}

return (&clnt_res);

}

calc_result *

sub_1(calc_args *argp, CLIENT *clnt) {...}

calc_result *

mul_1(calc_args *argp, CLIENT *clnt) {...}

calc_result *

div_1(calc_args *argp, CLIENT *clnt) {...}

rpcgen -C

31

Departamento de Engenharia Informática

2009 José Alves Marques 65

Exemplo: Ficheiro banco_svc.cGerado pelo rpcgen

#include <stdio.h>#include <rpc/rpc.h>#include "banco.h"static void bancoprog_1();

main(){ register SVCXPRT *transp;

(void) pmap_unset(BANCOPROG, BANCOVERS); transp = svcudp_create(RPC_ANYSOCK); if (transp == NULL) { fprintf(stderr, "cannot create udp service."); exit(1); } if (!svc_register(transp, BANCOPROG, BANCOVERS, bancoprog_1, IPPROTO_UDP)) { fprintf(stderr, "unable to register (BANCOPROG, BANCOVERS, udp)."); exit(1); } transp = svctcp_create(RPC_ANYSOCK, 0, 0); if (transp == NULL) { fprintf(stderr, "cannot create tcp service."); exit(1); } if (!svc_register(transp, BANCOPROG, BANCOVERS, bancoprog_1, IPPROTO_TCP)) { fprintf(stderr, "unable to register (BANCOPROG, BANCOVERS, tcp)."); exit(1); } svc_run(); fprintf(stderr, "svc_run returned"); exit(1); /* NOTREACHED */}

Departamento de Engenharia Informática

2009 José Alves Marques 66

Exemplo: Ficheiro banco_svc.cGerado pelo rpcgen

static voidbancoprog_1(rqstp, transp)struct svc_req *rqstp;register SVCXPRT *transp;{ union { criarIn criar_1_arg; int saldo_1_arg; contaEvalor depositar_1_arg; contaEvalor levantar_1_arg; transferirIn transferir_1_arg; pedirExtratoIn pedirextrato_1_arg; } argument; char *result; bool_t (*xdr_argument)(), (*xdr_result)(); char *(*local)();

switch (rqstp->rq_proc) { case NULLPROC: (void) svc_sendreply(transp, xdr_void,

(char *)NULL); return;

case CRIAR: xdr_argument = xdr_criarIn; xdr_result = xdr_criarRet; local = (char *(*)()) criar_1; break;

case SALDO: xdr_argument = xdr_int; xdr_result = xdr_saldoRet; local = (char *(*)()) saldo_1; break;

case PEDIREXTRATO: xdr_argument = xdr_pedirExtratoIn; xdr_result = xdr_pedirExtratoRet; local = (char *(*)()) pedirextrato_1; break;

default: svcerr_noproc(transp); return; } bzero((char *)&argument, sizeof(argument)); if (!svc_getargs(transp, xdr_argument, &argument)) { svcerr_decode(transp); return; } result = (*local)(&argument, rqstp); if (result != NULL && !svc_sendreply(transp, xdr_result,

result)) { svcerr_systemerr(transp); } if (!svc_freeargs(transp, xdr_argument, &argument)) { fprintf(stderr, "unable to free arguments"); exit(1); } return;}

32

Departamento de Engenharia Informática

2009 José Alves Marques 67

DCE RPC:Exemplo de IDL

• UUID (Universal Unique Identifier)– Valor de 128 bits único no espaço e no tempo

• Identificação (nomes)– Interface � (UUID, n° versão)

(522fd85c-4da5-4a50-aa82-43d14e5ad74e, 5)– Função � (Interface, n° função)

O número de função é atribuído pelo compilador de IDL

[ uuid 522fd85c-4da5-4a50-aa82-43d14e5ad74e ],

version (5),

endpoint (…)]

interface binopwk

{

[idempotent] void binopwk_add (

[in] handle_t h,

[in] long a, [in] long b, [out] long *c );

};

Departamento de Engenharia Informática

HTTP

Um exemplo de um protocolo cliente servidor mas que não é um RPC genérico

2009 José Alves Marques 69

33

Departamento de Engenharia Informática

2009 José Alves Marques 70

HyperText Transfer Protocol - HTTP

• Foi o protocolo de base da World Wide Web definido em 1990• Um cliente web comunica com um servidor Web usando uma ou

várias ligações TCP• Um porto normalmente predefinido para o servidor Web é o porto 80• O protocolo é muito simples:

– O cliente estabelece uma ligação TCP com o servidor– Manda um pedido– Lê a resposta– O servidor fecha a ligação

• Nas versões posteriores existem persistent connections que permanecem estabelecidas durante uma interacção

Departamento de Engenharia Informática

2009 José Alves Marques 71

HyperText Transfer Protocol - HTTP

• Protocolo de Pedido – Resposta do tipo RPC

• Diferença: funções remotas estão predefinidas:– GET, PUT, POST, etc.

• O protocolo permite parametrizar– Conteúdos – os pedidos dos

clientes podem especificar que tipo de dados aceitam

– Autenticação – Credenciais e desafios são utilizados para uma autenticação do tipo password

Método Descrição

GET Pedido de documento

HEAD Pedido apenas de cabeçalho de documento

PUT Pedido para guardar um documento

POST Fornecimento de informação para ser acrescentada ao documento

DELETE Pedido para apagar um documento

34

Departamento de Engenharia Informática

2009 José Alves Marques 72

Mensagem de Pedido

GET /somedir/page.html HTTP/1.1

Host: www.someschool.edu

Connection: close

User-agent: Mozilla/4.0

Accept-language: fr

Departamento de Engenharia Informática

2009 José Alves Marques 73

Formato genérico da mensagem de pedido

Request line

Header lines

method sp URL sp Version cr lf

Header field name: sp value cr lf

Header field name: sp value cr lf

cr lfBlank lineEntity body

35

Departamento de Engenharia Informática

2009 José Alves Marques 74

Mensagem de Resposta

HTTP Response Message

HTTP/1.1 200 OK

Connection: close

Date: Thu, 03 Jul 2003 12:00:15 GMT

Server: Apache/1.3.0 (Unix)

Last-Modified: Sun, 5 May 2003 09:23:24

GMT

Content-Length: 6821

Content-Type: text/html

(data data data data data ... )

Departamento de Engenharia Informática

2009 José Alves Marques 75

Formato genérico da mensagem de resposta

Status line

Header lines

version sp status code SP phrase cr lf

Header field name: sp value cr lf

Header field name: sp value cr lf

cr lfBlank lines

Entity body

36

Departamento de Engenharia Informática

2009 José Alves Marques 76

HTTP

• Heterogeneidade: – Os pedidos e respostas são transformados em cadeias

de caracteres, eliminando o problema da heterogeneidade mas tornado as mensagens muito mais longas

• A semântica é no máximo uma vez