capítulo3: chamadas de procedimentos remotosdisciplinas.ist.utl.pt/leic-sod/2008-2009/teoricas/3 -...
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