Projecto hipotético para resolvermos...

43
1 Page 1 Departamento de Engenharia Informática Projecto hipotético para resolvermos hoje 13/14 Sistemas Distribuídos 1 Departamento de Engenharia Informática Projecto hipotético para resolvermos hoje • Implementar servidor de contagem que mantém contador e oferece estas operações aos clientes: Colocar contador a zero Avançar o contador em x unidades Consultar valor actual do contador • Requisitos adicionais: Rede não é fiável • mensagens perdem-se, etc Sistema heterogéneo • Servidor e clientes representam inteiros de forma diferente 13/14 Sistemas Distribuídos 2

Transcript of Projecto hipotético para resolvermos...

Page 1: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

1

Page 1

Departamento de Engenharia Informática

Projecto hipotético para resolvermos hoje

13/14 Sistemas Distribuídos 1

Departamento de Engenharia Informática

Projecto hipotético para resolvermos hoje

• Implementar servidor de contagem que mantém contador e oferece estas operações aos clientes:

– Colocar contador a zero

– Avançar o contador em x unidades

– Consultar valor actual do contador

• Requisitos adicionais:– Rede não é fiável

• mensagens perdem-se, etc

– Sistema heterogéneo

• Servidor e clientes representam inteiros de forma diferente

13/14 Sistemas Distribuídos 2

Page 2: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

2

Page 2

Departamento de Engenharia Informática

Tentemos implementar isto com sockets...

13/14 Sistemas Distribuídos 3

Departamento de Engenharia Informática

Como executar cada operação?

13/14 Sistemas Distribuídos 4

Page 3: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

3

Page 3

Departamento de Engenharia Informática

Como executar cada operação?Protocolo RR

13/14 Sistemas Distribuídos 5

Request

Message

ServidorCliente

doOperation

(espera)

(continua)

Reply

Message

getRequest

Executaoperação

sendReply

Departamento de Engenharia Informática

Vamos escolher TCP ou UDP?

• Vantagens do TCP

– Oferece canal fiável sobre rede não fiável

• Mas talvez seja demasiado pesado. Porquê?

– Para cada invocação remota passamos a precisar de mais 2 pares de mensagens

– Gestão de fluxo é redundante para as invocações simples do nosso sistema

– Acknowledges nos pedidos são desnecessários

• Logo optemos por UDP!

13/14 Sistemas Distribuídos 6

Page 4: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

4

Page 4

Departamento de Engenharia Informática

O que levam as mensagens de pedido/resposta?

13/14 Sistemas Distribuídos 7

Identificador do pedido

Identificador da operação

Argumentos/retorno

Id Cliente + número

sequencial

Limpa=0

Incrementa=1

Consulta=2

Serializados em

sequência de bytes

Departamento de Engenharia Informática

Como serializar os argumentos/retorno?

• Necessário:

– Converter estruturas de dados para sequência de bytes

– Encontrar forma de emissor e receptor heterogéneos interpretarem dados correctamente

• Por exemplo: serializar em “formato de rede”

13/14 Sistemas Distribuídos 8

Page 5: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

5

Page 5

Departamento de Engenharia Informática

Modelo de faltas

• Usando UDP para enviar mensagens, estas podem:

– Perder-se

– Chegar repetidas

– Chegar fora de ordem

• Processos podem falhar silenciosamente

• Como lidar com isto?

13/14 Sistemas Distribuídos 9

Departamento de Engenharia Informática

Timeout no cliente

• Situação: cliente enviou pedido mas resposta não chega ao fim do timeout

• O que deve o cliente fazer?

• Hipótese 1: Cliente retorna erro.

– Pouco interessante...

• Hipótese 2: Cliente re-envia pedido

– Repete re-envio até receber resposta ou até número razoável de re-envios

13/14 Sistemas Distribuídos 10

Page 6: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

6

Page 6

Departamento de Engenharia Informática

Timeout no cliente com re-envio

• Quando a resposta chega após re-envio, o que pode ter acontecido?

13/14 Sistemas Distribuídos

∆t

cliente

servidor

reenvio

∆t

reenvio

clienteservidor

∆t

cliente

servidor

início

reenvio

Operação executada 2x!

Operação pode ter sido executada 2x!

Se não houver garantia de atomicidade (transacções), caso ainda pode ser pior...

11

Departamento de Engenharia Informática

Execuções repetidas do mesmo pedido:Qual o problema?

• Perde-se tempo desnecessário

• Efeitos inesperados se operação não for idempotente

• Função limpa é idempotente?

• Função incrementa é idempotente?

13/14 Sistemas Distribuídos 12

Operação que, se executada repetidamente, produz mesmo resultado que se só executada 1 vez

Page 7: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

7

Page 7

Departamento de Engenharia Informática

Execuções repetidas do mesmo pedido:Como evitar?

• Servidor deve ser capaz de verificar se id.pedido já foi recebido antes

• Se é a primeira vez, executa

• Se é pedido repetido?

– Deve guardar história de respostas de pedidos executados

• Tabela com (id.pedido, resposta)

– E retornar a resposta correspondente

13/14 Sistemas Distribuídos 13

Quantos pedidos manter por cliente?

Como escalar para grande número de clientes?

Departamento de Engenharia Informática

Outros protocolos de invocação remota

13/14 Sistemas Distribuídos 14

R Request

RR Reply

RRA Acknowledge reply

Request

Request Reply

Client Server Client

Name Messages sent by

Quando não há retorno e cliente não precisa de confirmação

Acknowledge permite ao servidor descartar resposta da sua história Como optimizar o RRA?

Page 8: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

8

Page 8

Departamento de Engenharia Informática

E se as mensagens forem maiores que um datagrama UDP?

• Podemos usar variante multi-pacote dos protocolos anteriores…

– Implica implementar protocolo complicado

• Ou usar TCP!

– Boa opção quando tamanho dos pedidos/respostas pode ser arbitrariamente grande

• Exemplo: HTTP

– Nesse caso, implementaçao é mais simples pois TCP já assegura fiabilidade da comunicação

– Como evitar o custo de estabelecimento de ligação?• Exemplo: HTTP versão 1.1.

13/14 Sistemas Distribuídos 15

Departamento de Engenharia Informática

Capítulo 3: Chamadas de Procedimentos Remotos

1613/14 Sistemas Distribuídos

Page 9: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

9

Page 9

Departamento de Engenharia Informática

Recuperemos o nosso exemplo da aula anterior…

Em Sun RPC

13/14 Sistemas Distribuídos 19

Departamento de Engenharia Informática

Exemplo de RPC: SUN RPC

• 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, Linux, Windows, etc

– C (linguagem original) mas também C++, Java, .Net,..

• Actualmente, também chamado ONC RPC

2013/14 Sistemas Distribuídos

Page 10: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

10

Page 10

Departamento de Engenharia Informática

21

Sun RPC1º passo: definição da interface remota

• 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

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

22

Sun RPC1º passo: definição da interface remota

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

(300030, 1)

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

program COUNTER {

version COUNTER_VERS {

void clean (int) = 0;

void inc (int) = 1;

int read (int) = 2;

} = 1;

} = 300030;

13/14 Sistemas Distribuídos

Page 11: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

11

Page 11

Departamento de Engenharia Informática

23

Sun RPC2º passo: geração de stubs, etc

Makefile

SampleMakefile

counter_clnt.ccounter_clnt.c

Clientstubs

counter_srv.ccounter_srv.c

Serverstubs &

dispatcher

counter.h

Definições

Protótipos

Definições

Tipos

Protótipos

Clientsource files

Serversource files

counter.x

ServiceInterface

rpcgen

counter_xdr.ccounter_xdr.c

marshalingXDR

marshaling

#include

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Sun RPC:3º passo: implementar procedimentos

void *

clean_1_svc(int *argp, struct svc_req *rqstp)

{

static char * result;

/*

* insert server code here

*/

return (void *) &result;

}

13/14 Sistemas Distribuídos 24

Page 12: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

12

Page 12

Departamento de Engenharia Informática

Sun RPC:4º passo: implementar cliente

clnt = clnt_create(host,COUNTERS,COUNTERS_VERS,"udp");

if (clnt == NULL) {...}

...

result_3 = read_1(&read_1_arg, clnt);

if (result_3 == NULL) {...}

13/14 Sistemas Distribuídos 25

Departamento de Engenharia Informática

Afinal o que é RPC?

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

• Objectivo: Tornar a programação distribuída semelhante à programação convencional

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

2613/14 Sistemas Distribuídos

Page 13: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

13

Page 13

Departamento de Engenharia Informática

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

2713/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Linguagem de Descrição de interfaces -IDL

A Visão da Programação do RPC

2813/14 Sistemas Distribuídos

JAM3

Page 14: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

Slide 28

JAM3 Inicio aula 4Prof. José Alves Marques; 27-02-2012

Page 15: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

14

Page 14

Departamento de Engenharia Informática

RPC IDL: Características

• Linguagem própria

• Permite definir

– Tipos de dados

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

– Interfaces• Conjuntos de funções

• Não define a implementação das funções

2913/14 Sistemas Distribuídos

Departamento de Engenharia Informática

31

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);

13/14 Sistemas Distribuídos

Page 16: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

15

Page 15

Departamento de Engenharia Informática

32

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

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

34

IDL: Soluções para alguns dos problemas

• Só se permite passagem por valor– Se pretendíamos passar variável por referência, devemos

definir como parâmetro de entrada e de saída

• 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)

13/14 Sistemas Distribuídos

Page 17: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

16

Page 16

Departamento de Engenharia Informática

Sun RPC: Arquitectura

13/14 Sistemas Distribuídos 38

Departamento de Engenharia Informática

Arquitectura

39

Run-Time LibraryRun-Time Library

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

13/14 Sistemas Distribuídos

Page 18: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

17

Page 17

Departamento de Engenharia Informática

40

Arquitectura

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

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

ArquitecturaRotinas de adaptação (stubs)

• 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)

41

serverFunc ( … );

serverFunc ( … )

{

}

servidorclientStub ( … )

{

}

cliente

serverStub ( … )

{

}

13/14 Sistemas Distribuídos

Page 19: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

18

Page 18

Departamento de Engenharia Informática

ArquitecturaFunçã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

4213/14 Sistemas Distribuídos

Departamento de Engenharia Informática

ArquitecturaO 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

4313/14 Sistemas Distribuídos

Page 20: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

19

Page 19

Departamento de Engenharia Informática

Ilustremos com um exemplo…

13/14 Sistemas Distribuídos 44

Departamento de Engenharia Informática

45

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

13/14 Sistemas Distribuídos

Page 21: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

20

Page 20

Departamento de Engenharia Informática

46

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

calc.x

calc_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;

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

47

Diagrama de ficheiros (cont.)

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

{...}

calc_srv.cmain(...)

{ ...svc_run();

}calc_prog_1(...)

{...}

calc.h

sum_1_svc ,...);

typedef ... calc_result;typedef ... calc_args;

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

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

calc.xcalc_result

sum(calc_args)...

VERSION=1

rpcgen -C

sum_1_svccalc_result ∗∗∗∗

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

main(...){...}

calc_clnt.ccalc_clnt.c

calc_xdr.cxdr_calc_result()

{...}xdr_calc_args()

{...}

13/14 Sistemas Distribuídos

Page 22: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

21

Page 21

Departamento de Engenharia Informática

48

Funções de conversão via XDRcalc.x

enum 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

Chamadas a funções de conversão

de tipos base

(oferecidas na biblioteca

run-time do SUN RPC)

Funções de conversão

para cada tipo definido no IDL

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

49

Funções do cliente (stubs)calc.x

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;

calc_clnt.ccalc_clnt.c

#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

Função genérica de chamada

de procedimento remoto

(da biblioteca de run-time)

13/14 Sistemas Distribuídos

Page 23: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

22

Page 22

Departamento de Engenharia Informática

50

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;

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

51

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 */}

Cria porto UDP

Associa nome da interface

e função de despacho

ao porto

Faz o mesmo para porto TCP

Lança ciclo de espera de pedidos

Quando chegar algum pedido,

svc_run() chama a função

de despacho

Função de despacho

13/14 Sistemas Distribuídos

Page 24: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

23

Page 23

Departamento de Engenharia Informática

52

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;}

Função genérica para

obter argumentos

(da biblioteca de run-time)

Função genérica para

enviar resposta

(da biblioteca de run-time)

Função de despacho

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Heterogeneidade

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

5313/14 Sistemas Distribuídos

Page 25: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

24

Page 24

Departamento de Engenharia Informática

Heterogeneidade

• Nos sistemas distribuídos a heterogeneidade é a regra

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

flutuante)

– Nas estruturas de dados geradas pelos compiladores

– Nos sistemas de armazenamento (ex: strings ASCII vs Unicode)

– Nos sistemas de codificação

5413/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Marshalling

• As redes transmitem bytes entre as máquinas– Necessário serializar objectos em memória para

sequência de bytes

– Des-serializar sequência de bytes para objectos na máquina destino

• Máquinas representam tipos de formas diferentes– É necessário traduzir entre representação de tipos

do emissor e representação de tipos do receptor

• Marshalling: serializar + traduzir– Unmarshalling: operação inversa

5513/14 Sistemas Distribuídos

Page 26: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

25

Page 25

Departamento de Engenharia Informática

56

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.

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

57

Protocolos de Apresentação no RPC -Decisões a efectuar

Estrutura das mensagens

•Implícita – as mensagens apenas contêm os dados a transmitir

•Explicita – Auto-descritiva(marcada, tagged)

13/14 Sistemas Distribuídos

Page 27: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

26

Page 26

Departamento de Engenharia Informática

Protocolos de Apresentação no RPC -Decisões a efectuar

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

5813/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Sun XDR (External Data Representation)

• Estrutura implícita– É suposto cliente e servidor conhecerem a priori os tipos dos

parâmetros em cada invocação (do IDL)

• Representação binária, conversão canónica– Parâmetros serializados em sequências de blocos de 4 bytes

– Inteiros, booleanos, etc: 1 bloco de 4bytes

• Convenção define qual byte de cada bloco é o mais significativo

– Arrays, estruturas e cadeias de caracteres ocupam múltiplos blocos

• Seguidos por bloco que indica o nº de blocos

• Convenção define qual das extremidades da cadeia de blocos corresponde ao primeiro

– Caracteres em ASCII

5913/14 Sistemas Distribuídos

Page 28: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

27

Page 27

Departamento de Engenharia Informática

Sun XDR (External Data Representation)

• Exemplo de marshalling de parâmetros em mensagem Sun XDR:

– ‘Smith’, ‘London’, 1934

13/14 Sistemas Distribuídos 60

Departamento de Engenharia Informática

61

Protocolos de ApresentaçãoXDR

(eXternal Data Representation)

NDR

(Network Data Representation)

ASN.1

(Abstract Syntax Notation)

CDR

(Common Data Representation)

Java Object Serialization

XML

(Extensible Markup

Language)

Tecnologia Sun RPC DCE RPC

Microsoft RPC

OSI CORBA Java RMI W3C

Conversão Canónica O-receptor-converte

Canónica O-receptor-converte

Canónica Canónica

Estruturadas msgs.

Implícita

Binária

Comprimentode vectoresvariáveis

Alinhamentoa 32 bits (exceptovectores de caracteres)

Implícita

Binária

Marcasarquitecturais

(architecture tags)

Explícita –Tagged

Binária

Encoding Rules:

Basic

Distinguished

Canonical

Packed

Implícita

Binária

Explícita

Binária

Explicita –Tagged

Textual

Tipos de Documentos

DTD

XML schema

Page 29: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

28

Page 28

Departamento de Engenharia Informática

Ligação ou Binding

Ligação entre o Cliente e o Servidor

6213/14 Sistemas Distribuídos

Departamento de Engenharia Informática

63

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

Page 30: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

29

Page 29

Departamento de Engenharia Informática

64

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

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

65

O registo tem de ser efectuado pelo servidor

• 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

13/14 Sistemas Distribuídos

Page 31: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

30

Page 30

Departamento de Engenharia Informática

67

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

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

68

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);

}

A função

retorna um

binding handle

A chamada ao

procedimento remoto

explicita o binding handle

13/14 Sistemas Distribuídos

Page 32: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

31

Page 31

Departamento de Engenharia Informática

69

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

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

70

Outras opções de binding

• 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

13/14 Sistemas Distribuídos

Page 33: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

32

Page 32

Departamento de Engenharia Informática

RPC: é realmente transparente?

13/14 Sistemas Distribuídos 72

Departamento de Engenharia Informática

RPC: É realmente transparente?

• 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

7313/14 Sistemas Distribuídos

Page 34: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

33

Page 33

Departamento de Engenharia Informática

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 ou reordenação de mensagens• Por simplicidade, assumimos que canal não duplica

mensagens

– Faltas no servidor e no cliente• Por simplicidade, assumimos que execução no servidor é

atómica

– Possibilidade de servidor e cliente re-iniciarem após a faltas

7413/14 Sistemas Distribuídos

Departamento de Engenharia Informática

75

Algumas faltas possíveis

∆t

cliente

servidor

início

reenvio

∆t

cliente

servidor

reenvio

cliente

servidor

início

∆t

reenvio

cliente

servidor

Assumimos que o procedimento é atómico.Ou seja, se servidor falha:• ou o procedimento não se executou de todo,• ou executou-se completamente antes da falha13/14 Sistemas Distribuídos

Page 35: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

34

Page 34

Departamento de Engenharia Informática

76

Semânticas de execução

Talvez (maybe)

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

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

Exactamente-uma-vez (exactly-once)

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Semântica de execução

• A semântica de execução do RPC é sempre considerada na ótica do cliente

• Se a chamada retornar no cliente o que é que se pode inferir da execução considerando que existe uma determinado modelo de faltas

• O modelo de faltas especifica quais as faltas consideradas possíveis de ocorrer

7713/14 Sistemas Distribuídos

Page 36: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

35

Page 35

Departamento de Engenharia Informática

Semânticas de execução

78

Semântica talvez

• O stub cliente não recebe uma resposta num prazo limite

• O timeout expira e o chamada retorna com erro

• No caso de erro, o cliente não sabe se o pedido foi executado ou não

Protocolo

• Protocolo não pretende tolerar nenhuma falta pelo que nada faz para recuperar de uma situação de erro

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Semânticas de execução

Semântica pelo-menos-uma-vez

• O stub cliente não recebe uma resposta num prazo limite

• O timeout expira e o stub cliente repete o pedido até obter uma resposta

• Se receber uma resposta o cliente tem a garantia que o pedido foi executado pelo menos uma vez

• Para evitar que o cliente fique permanentemente bloqueado em caso de falha do servidor existe um segundo timeout mais amplo

Para serviços com funções idempotentes

7913/14 Sistemas Distribuídos

Page 37: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

36

Page 36

Departamento de Engenharia Informática

80

Semânticas de execução

Semântica no-máximo-uma-vez

• O stub cliente não recebe uma resposta num prazo limite

• O timeout expira e o stub cliente repete o pedido

• O servidor não executa pedidos repetidos

• Se receber uma resposta o cliente tem a garantia que o pedido foi executado 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 dos pedidos em curso ou que já foram atendidos

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Resumo de técnicas para cada semântica

Fault tolerance measures Invocation semantics

Retransmit request message

Duplicate filtering

Re-execute procedure or retransmit reply

No

Yes

Yes

Not applicable

No

Yes

Not applicable

Re-execute procedure

Retransmit reply At-most-once

At-least-once

Maybe

E no caso da semântica exactamente-uma-vez?

8113/14 Sistemas Distribuídos

Page 38: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

37

Page 37

Departamento de Engenharia Informática

82

Semânticas de execução

Semântica exactamente-uma-vez

• O stub cliente não recebe uma resposta num prazo limite

• O timeout expira e o stub cliente repete o pedido

• O servidor não executa pedidos repetidos

• Se o servidor falhar existe a garantia de fazer rollback ao estado do servidor

Protocolo

• Servidor e cliente com funcionamento transacional

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

83

Protocolo de invocação remota usado pelo RPC

• 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)

13/14 Sistemas Distribuídos

Page 39: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

38

Page 38

Departamento de Engenharia Informática

84

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 necessárias duas mensagens comUm transporte do tipo UDP

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

85

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, ...]Timeout

Cliente

FragmentaçãoMensagem de invocação

TimeoutServidor

13/14 Sistemas Distribuídos

Page 40: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

39

Page 39

Departamento de Engenharia Informática

RPC sobre UDP ou TCP?

• Vantagens do uso de TCP– Possibilidade de envio de parâmetros de tamanho arbitrário

• Datagrams UDP limitados a 8KBytes, tipicamente• Envio de parâmetros maiors que 8KB implica protocolo RPC multi-

pacote mais complexo de implementar

– TCP já assegura entrega fiável de pedido/resposta, tornando RPC mais simples

• Qual a semântica oferecida por um RPC sobre TCP?

– Mecanismos de controlo de fluxo do TCP adequados para envio de parâmetros de grande dimensão

• Vantagens do uso de UDP– Evita tempo de estabelecimento de ligação TCP– Quando os aspectos acima não são relevantes, envia

mensagens mais eficientemente

8613/14 Sistemas Distribuídos

Departamento de Engenharia Informática

87

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

Page 41: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

40

Page 40

Departamento de Engenharia Informática

88

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

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

89

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

13/14 Sistemas Distribuídos

Page 42: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

41

Page 41

Departamento de Engenharia Informática

90

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

13/14 Sistemas Distribuídos

Departamento de Engenharia Informática

91

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

13/14 Sistemas Distribuídos

Page 43: Projecto hipotético para resolvermos hojedisciplinas.ist.utl.pt/~leic-sod.daemon/2013-2014/teoricas_tagus/3... · calc _clnt.c Client stubs calc _srv.c Server stubs & dispatcher

42

Page 42

Departamento de Engenharia Informática

92

Sumário do RPC:Infraestrutura 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

Sistemas Distribuídos 2009/1013/14 Sistemas Distribuídos

Departamento de Engenharia Informática

Sumário do RPC: comparação com Mensagens

Positivo Negativo� Programação usando uma iDL que é uma linguagem

idêntica às linguagens de programação habituais.

�A interface do serviço encontra-se claramente

especificada e não é apenas um conjunto de mensagens

� 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

�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 ambas são modificadas

coerentemente

�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)

• Funcionamento síncrono

•A semântica exactamente-uma-vez não é possível sem

um suporta transaccional

•A transparência de execução entre um chamada local

e remota

•Existem mais níveis de software que implicam maior

overhead na execução

93