Sun RPC: Arquitectura



Documentos relacionados
Projecto hipotético para resolvermos hoje

Chamadas Remotas de Procedimentos (RPC)

Capítulo 3: Chamadas de Procedimentos Remotos

Chamada Remota de Procedimento (RPC)

Capítulo 3: Chamadas de Procedimentos Remotos

rpcgen - Funcionamento rpcgen Exemplo de arquivo de especificação: Passo 1: Construir uma Aplicaçao Convencional

Capítulo 3: Chamadas de Procedimentos Remotos

Sistemas Distribuídos Arquiteturas Middlewares

Sistemas Distribuídos RPC x RMI. Edeyson Andrade Gomes

Chamada Remota de Procedimento (RPC)

Sistemas Distribuídos

Comunicação entre processos (RPC) COMUNICAÇÃO ENTRE PROCESSOS Remote Procedure Call - RPC. Comunicação entre processos (RPC)

Comunicação em Sistemas Distribuídos. Bruno M. Carvalho Sala: 3B2 Horário: 35T34

OProtocolo RPC é um dos protocolos de aplicação mais utilizados, pois permite


Grupo I [7v] 1. [1,0] Apresente o conteúdo do IDL relativo a este programa. Assuma PROGRAM=62015 e VERSION=1.

Grupo I [6v] Considere o seguinte extracto de um programa de definição de uma calculadora apenas com a função soma de dois valores reais

Grupo I [6,6v] Responda com os valores que se observam depois da chamada acontecer. 1 Falta na mensagem de resposta. Valor retornado na chamada

Capítulo 3: Chamadas de Procedimentos Remotos

Chamadas do Socket. Socket(int family, int type, int protocol) SOCK_STREAM SOCK_DGRAM AF_INET AF_UNIX AF_NS. sockfd = socket(af_inet, SOCK_STREAM, 0)

UNIVERSIDADE. Sistemas Distribuídos

Projecto hipotético para resolvermos hoje

Comunicação. Parte II

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Sistemas Distribuídos RPC

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Transporte. Sua função é: Promover uma transferência de dados confiável e econômica entre máquina de origem e máquina de destino.

Comunicação entre Processos

Algoritmos e Programação

Remote Procedure Call

Sistemas Distribuídos 59. Sistemas Distribuídos 61. "Receive não-bloqueante:

Computação II Orientação a Objetos

Sistemas Distribuídos. Coulouris Capítulo 4

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Capítulo II Modelos de Programação Distribuída

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Princípios de Sistemas Distribuídos. Tecnologias utilizadas em sistemas distribuídos Aula 5

LEIC/LERC 2008/09 Primeiro Teste de Sistemas Distribuídos. Grupo I [7,2 valores]

Redes de Computadores (RCOMP 2014/2015)

Tipo de Dados em Linguagem C

INTRODUÇÃO. RPC x RMI

UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA. Sistemas Distribuídos

Remote Procedure Calls (RPC)

Sistemas Distribuídos

Capítulo V Sistemas de Objectos Distribuídos

Sistemas Distribuídos RPC Remote Procedure Call

Comunicação Inter-Processos. Prof. Adriano Fiorese. Conceitos Iniciais

MIDDLEWARE Aplicativos RMI, RPC e eventos Camadas Protocolo Requesição-Respostal Middleware Representação Externa dos Dados Sistemas Operacionais

O COMPUTADOR. Introdução à Computação

Departamento de Informática

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

REDES INTEGRADAS DE TELECOMUNICAÇÕES II 2011 / 2012

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Comunicação em Sistemas Distribuídos

Camada de Transporte, protocolos TCP e UDP

Licenciatura em Engenharia Informática Sistemas Distribuídos I 2ª chamada, 6 de Julho de º Semestre, 2004/2005

Programação Estruturada I

Adriano Reine Bueno Rafael Barros Silva

Redes de Computadores

Gestão de projectos na Web

Endereços de transporte TPDU. Nível de Rede Endereço de rede. Figura 1. Entidade de transporte

Redes de Computadores II

No projeto das primeiras redes de computadores, o hardware foi a principal preocupação e o software ficou em segundo plano.

Algoritmo e Técnica de Programação - Linguagem C

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Comunicação entre Processos

REDES DE COMPUTADORES

Variáveis e Comandos de Atribuição

Redes de Computadores (LTIC) 2013/14. GRUPO 1 (7 valores) 1º Teste 1 de Abril de Nome: Nº de aluno:

Nível de Enlace. Nível de Enlace. Serviços. Serviços oferecidos os nível de rede

Departamento de Informática

Programação de Computadores - I. Profª Beatriz Profº Israel

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

UNIVERSIDADE. Sistemas Distribuídos

OBJETOS DISTRIBUÍDOS E INVOCAÇÃO REMOTA

Introdução a Web Services

Existem muitos assuntos relacionados com o Skype. Logo, esta apresentação focar-seá essencialmente nos aspectos mais importantes sobre a arquitectura

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Web services. Um web service é qualquer software que está disponível através da Internet através de uma interface XML.

Serviços Web: Arquitetura

SISTEMAS DISTRIBUIDOS

Sistemas de Operação Sockets

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Capítulo VI CORBA. Common Object Request Broker Architecture. [Cardoso2008] Programação de Sistemas Distribuídos em Java, Jorge Cardoso, FCA, 2008.

Sistemas Distribuídos

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

Algoritmos e Técnicas de

Sockets. Bruno Guimarães Lucas Rossini

1 a. Sumário. 1. Conceitos Básicos a. Invocação remota (RPC/RMI) b. Semântica de invocação remota c. Invocação remota de métodos (RMI)

ÇÃO COM OBJECTOS PROGRAMAÇÃ. Programação com Objectos. Programação com Objectos TUDO É UM OBJECTO TUDO É UM OBJECTO ÍNDICE.

COMUNICAÇÃO INTER-PROCESSOS JAVA RMI e RPC. Prof. Cesar Augusto Tacla

Invocação de Métodos em Objectos Remotos

Sistemas Distribuídos Modelo Cliente-Servidor

3. Comunicação em Sistemas Distribuídos

Sistemas Distribuídos

Transcrição:

Sun RPC: Arquitectura 12/13 Sistemas Distribuídos 38 Arquitectura Código do cliente Código do servidor stubs Run-Time Library Protocolo de apresentação Protocolo de sessão stubs (ou ties) Run-Time Library Threads transporte Protocolo de transporte transporte Threads 39 Page 1 1

Arquitectura Máquina A Aplicação cliente funcx(args); Máquina B Aplicação servidora funcx(args); Kernel pedido RPC stubs resposta Socket TCP ou UDP Kernel RPC stubs + dispatcher pedido resposta Socket TCP ou UDP connect 40 Arquitectura Rotinas 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) cliente serverfunc ( ); clientstub ( ) { serverstub ( ) { servidor serverfunc ( ) { 41 Page 2 2

Arquitectura 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 42 Arquitectura 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 43 Page 3 3

Sun RPC: Serviço de Nomes e encaminhamento de RPCs Máquina A cliente rpcbind porto 111 porto de transporte registo (n interface, porto de transporte) procura (n interface, transporte) Máquina B servidor Cliente stub call ( binding handle n interface, n função, parâmetros) pedido resposta XID (op. id) XID RPC version RPC error n interface resultados n função autenticador parâmetros transporte despacho da interface stub Servidor operação 44 Ilustremos com um exemplo 12/13 Sistemas Distribuídos 45 Page 4 4

Diagrama de ficheiros calc.x Service Interface calc_clnt.c Client stubs Client source files rpcgen calc.h Definições Tipos Protótipos #include calc_xdr.c XDR marshaling Makefile Sample Makefile calc_srv.c Server stubs & dispatcher Server source files 46 rpcgen: definição e compilação da interface 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; ; calc_clnt.c calc_svc.c calc_xdr.c rpcgen -C rpcgen -Sc rpcgen -Ss rpcgen -Sm 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; Sample client Sample server Sample Makefile 47 Page 5 5

Diagrama de ficheiros (cont.) calc.x calc_result sum(calc_args)... VERSION=1 rpcgen -C calc.h typedef... calc_result; typedef... calc_args; calc_result sum_1(calc_args,...); calc_result sum_1_svc(calc_args,...); calc_clnt.c calc_result sum_1(calc_args,...) {... calc_xdr.c xdr_calc_result() {... xdr_calc_args() {... main(...) {... calc_srv.c main(...) {... svc_run(); calc_prog_1(...) {... calc_result sum_1_svc(calc_args,...) {... 48 Funções de conversão via XDR calc.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; ; rpcgen -C 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; Funções de conversão calc_xdr.c para cada tipo definido no IDL #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); Chamadas a funções de conversão de tipos base (oferecidas na biblioteca run-time do SUN RPC) 49 Page 6 6

Funções do cliente (stubs) calc.x enum calc_error { CALC_OK = 0, /* No error */ CALC_ZERO_DIV = 1 /* Division by zero */ ; calc_clnt.c #include "calc.h Função genérica de chamada de procedimento remoto (da biblioteca de run-time) static struct timeval TIMEOUT = { 25, 0 ; 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; rpcgen -C 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) {... 50 Exemplo: IDL Sun 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; 51 Page 7 7

Exemplo: Ficheiro banco_svc.c Gerado pelo rpcgen #include <stdio.h> #include <rpc/rpc.h> #include "banco.h" static void bancoprog_1(); Cria porto UDP main() { register SVCXPRT *transp; (void) pmap_unset(bancoprog, BANCOVERS); transp = svcudp_create(rpc_anysock); if (transp == NULL) { fprintf(stderr, "cannot create udp service."); Função de despacho 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 */ 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 52 Exemplo: Ficheiro banco_svc.c Gerado pelo rpcgen Função de despacho static void bancoprog_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; Função genérica para obter argumentos (da biblioteca de run-time) 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 enviar resposta (da biblioteca de run-time) 53 Page 8 8

Protocolos e Serviços necessário para suportar o RPC Heterogeneidade 54 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 55 Page 9 9

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 56 Resolução da Heterogeneidade na Comunicação Modelo OSI camada de Apresentação Protocolo ASN.1 Sistemas de RPC aproveitamdescriçã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. 57 Page 10 10

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) 58 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 59 Page 11 11

Sun XDR (External Data Representation) Estrutura implícita É suposto cliente e servidor conhecerem a priorios 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 60 Sun XDR (External Data Representation) Exemplo de marshalling de parâmetros em mensagem Sun XDR: Smith, London, 1934 12/13 Sistemas Distribuídos 61 Page 12 12

Protocolos de Apresentação XDR (externaldata 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 Conversão Canónica OSI CORBA Java RMI W3C Canónica O-receptorconverte O-receptorconverte Canónica Canónica Estrutura das msgs. Implícita Binária Implícita Binária Explícita Tagged Binária Implícita Binária Explícita Binária Explicita Tagged Textual Comprimento de vectores variáveis Alinhamento a 32 bits (excepto vectores de caracteres) Marcas arquitecturais (architecture tags) Encoding Rules: Basic Distinguished Canonical Packed Tipos de Documentos DTD XML schema 62 Ligação entre o Cliente e o Servidor Ligação ou Binding 63 Page 13 13

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 procura N2 N1 registo Serviço de Nomes servidor N1 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 65 Page 14 14

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 66 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 handleno 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 68 Page 15 15

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: A função %s máquina do servidor\n", argv[0]); exit(1); server = argv[1]; retorna um binding handle cl = clnt_create(server, BANCOPROG, BANCOVERS, A "tcp"); chamada ao if(cl == NULL) { procedimento remoto clnt_pcreateerror(server); explicita o binding handle exit(1); sresult = saldo(nconta, cl); 69 Ligação cliente-servidor Os binding handlespodem ser usados pelos stubsde 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 70 Page 16 16

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 72 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 Faltas no servidor e no cliente Possibilidade de servidor e cliente re-iniciarem após a faltas 73 Page 17 17

Algumas faltas possíveis cliente t servidor reenvio cliente servidor t início reenvio cliente t servidor cliente início servidor reenvio 74 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) 75 Page 18 18

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 76 Semânticas de execução Semântica talvez O stub cliente não recebe uma resposta num prazo limite O timeoutexpira e o chamada retorna com 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 77 Page 19 19

Semânticas de execução Semântica pelo-menos-uma-vez O stubcliente não recebe uma resposta num prazo limite O timeoutexpira e o stubcliente 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 timeoutmais amplo Para serviços com funções idempotentes 78 Semânticas de execução Semântica no-máximo-uma-vez O stubcliente não recebe uma resposta num prazo limite O timeoutexpira e o stubcliente repete o pedido O servidor não executa pedidos repetidos Se receber uma resposta o cliente tem a garantiaque 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 79 Page 20 20

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 Not applicable Not applicable Maybe Yes No Re-execute procedure At-least-once Yes Yes Retransmit reply At-most-once E no caso da semântica exactamente-uma-vez? 80 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 rollbackao estado do servidor Protocolo Servidor e cliente com funcionamento transacional 81 Page 21 21

Protocolo de controlo do 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) 82 Protocolo de RPC Situação Ideal Máquina do Cliente Utilizador Chamada RPC Enviar pacote Esperar ack ou resultado Call [CallID, procedimento, argumentos] Máquina do Servidor RPC Invocar função Servidor Executar função Retornar Resultado[CallID, resultados] Enviar resultados Retornar Apenas são necessárias duas mensagens com Um transporte do tipo UDP 83 Page 22 22

Protocolo de RPC: Situação Complexa Máquina Cliente Máquina do Servidor Utilizador Chamada RPC Enviar call msg Esperar ack Call[CallID. Pkt=0, pleaseack,...] RPC Servidor memorizar a msg Fragmentação Mensagem de invocação Construir o prox. pacote Enviar o pacote Esperar ack Ack[CallID, Pkt=0] Data[CallID, Pkt=1, dontack,...] Confirmar Esperar pelo próximo pacote Chamar a função Executar função Timeout Cliente Retransmitir Esperar ack Data[CallID, Pkt=1, pleaseack,...] Esperar resultado Retornar Confirmar Ack[CallID, Pkt=1] Result[CallID, Pkt=2, dontack,...] Result[CallID, Pkt=2, pleaseack,...] Ack[CallID, Pkt=2] Confirmar Enviar resultado Esperar ack Retransmitir Esperar ack Retornar Timeout Servidor 84 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 multipacote 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 85 Page 23 23

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 threadpor 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 86 Execução de RPCs: (ii) Fluxos de execução simples Clientes Um pedido de cada vez Vários pedidos em paralelo Uma threadpor 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 87 Page 24 24

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 ou threads diferentes? mesma thread mesmo CallID base 88 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 89 Page 25 25

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 90 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/10 91 Page 26 26

Sumário do RPC: comparação com Mensagens Positivo 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 Negativo 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 92 Page 27 27