UNIVERSIDADE. Sistemas Distribuídos

Documentos relacionados
Ricardo Couto Antunes da Rocha 2005 Ricardo Couto Antunes da Rocha

Capítulo IV Comunicação entre processos

Processos em Sistemas Distribuídos e Comunicação entre Processos

Comunicação entre Processos

Computação Distribuída

Protocolo Request-Reply

INTRODUÇÃO. RPC x RMI

Sistemas Distribuídos

Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP. Prof. Me. Sérgio Carlos Portari Júnior

Resumo das Propriedades de UDP e de TCP

Comunicação. Carlos A. G. Ferraz 25/6/2003. Sistemas Distribuídos 1. Tópicos. Camadas. Transmissão de dados. Marshalling/Unmarshalling.

Processos em Sistemas Distribuídos: Comunicação entre Processos, Nomeação e Sincronização

User Datagram Protocol

Sistemas Distribuídos. Prof. Ricardo Ribeiro dos Santos

Invocação Remota. Prof. Leonardo Barreto Campos. 1/29

Capítulo IV Comunicação entre processos

Principais conceitos de CORBA

Sistemas Distribuídos

O que é um sistema distribuído?

Redes de Computadores

Vamos fazer um pequeno experimento

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ SOCKETS UDP, TCP E MULTICAST. Prof. Cesar Augusto Tacla

Dados em programas são estruturados, enquanto que mensagens carregam informação seqüencial: Linearização x Restauração de dados Requisição

Nível de Transporte Portas, Protocolos UDP e TCP

Sistemas Distribuídos

Funcionalidades da camada de rede

Sistemas Distribuídos. Coulouris Capítulo 4

Canais de Comunicação

Sistemas Distribuídos Aula 10

REDES DE COMPUTADORES

Prof. Marcelo Cunha Parte 6

Sockets e Threads em Java

Sistemas Distribuídos Capítulo 8 - Aula 14

Redes de Computadores

PROTOCOLOS DE COMUNICAÇÃO

Rede de computadores Protocolos UDP. Professor Carlos Muniz

Fundamentos de Sistemas Operacionais

CCNA 2 Conceitos Básicos de Roteadores e Roteamento. Capítulo 8 - Mensagens de Erro e de Controle do Conjunto de Protocolos TCP/IP

Data and Computer Network Endereçamento IP

RPC e RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Resumo P2. Internet e Arquitetura TCP/IP

Capítulo 5 Sumário. Formato das Mensagens ICMP. Tipos de Mensagens ICMP

Comunicação entre Processos

Camada de Transporte Protocolos TCP e UDP

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

Redes TCP/IP. Prof. M.Sc. Alexandre Fraga de Araújo. INSTITUTO FEDERAL DO ESPÍRITO SANTO Campus Cachoeiro de Itapemirim

UNIVERSIDADE. Sistemas Distribuídos

Java RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Redes de Computadores

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

15/4/15. Processamento Paralelo Middleware Orientado a Objetos. Sistema operacional é a única infraestrutura para interação. Middleware é adicionado

Redes de Computadores e Telecomunicações - Camada de Transporte

FUNDAMENTOS DE REDES DE COMPUTADORES Unidade 5 Camada de Transporte e Aplicação. Luiz Leão

Funções da Camada de

Direto ou Indireto Monolítico ou Estruturado Simétrico ou Assimétrico Padronizado ou Não-Padronizado

Sistemas Distribuídos

Protocolos TCP e UDP. Protocolo TCP. Protocolo TCP. A necessidade de uma comunicação segura: Transmission Control Protocol

Redes de Computadores II. Programação com Sockets em Python

Redes de computadores e a Internet. Prof. Gustavo Wagner. A camada de rede

Redes de Computadores. Protocolos TCP/IP

Comunicação entre processos COMUNICAÇÃO ENTRE PROCESSOS. Comunicação entre processos - troca de mensagens

Redes de Computadores e Aplicações Camada de aplicação IGOR ALVES

Desenvolvimento de Aplicações Distribuídas

Redes de Computadores 2 Prof. Rodrigo da Rosa Righi - Aula 6

Programação em Rede Baseada em Java. Luiz Affonso Guedes Tópicos em Redes de Computadores Programação Distribuída

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

Protocolos da camada de redes. Professor Leonardo Larback

Transcrição:

UNIVERSIDADE Sistemas Distribuídos Ciência da Computação Prof. Jesus José de Oliveira Neto Comunicação Inter-Processos Representação Externa de Dados e Marshalling

Representação externa de dados Informações armazenadas em programas são representadas como uma estrutura de dados Na transmissão de informações, as informações são representadas numa seqüência de bytes Necessidade de conversão: estrutura de dados < > seqüência de bytes Problema Solução Diferentes sistemas possuem diferentes estruturas de dados Ex: Código ASC x UNICODE, big endian x little endian, formatos de ponto flutuante etc. Conversão para um formato de dados de comum acordo (external Data Representation XDR) Enviar no formato do emissor e incluir informação sobre o formato empregado

Representação externa de dados

Representação externa de dados Formato independente de linguagem, SO etc Utilizada para comunicação dos dados de requisições e respostas entre clientes e servidores Formato serializado Marshalling: conversão entre a representação interna e externa CORBA Common Data Representation Serialização de objetos em Java XML (Extensible Markup Language)

Marshalling (Empacotamento) Processo de converter uma coleção de dados e organizá-los em um formato próprio para transmissão Unmarshalling é o processo oposto Ideal não haver o envolvimento explícito da aplicação (transparência) Responsabilidade do middleware Duas técnicas básicas Conversão dos dados para um formato binário Conversão dos dados para um formato texto (ASC II) Serialização Java e XML

CORBA CDR Representação para tipos primitivos inteiros, ponto flutuante, octeto big-endian e little-endian posicionamento de cada item de dados na msg. Representação para tipos construídos seqüência, string, array, struct, enumeração, união construída a partir das seqüências de bytes correspondentes aos tipos primitivos constituintes Informação de tipo: subentendida através da definição das operações em IDL

Representação de tipos construídos em CORBA CDR Type sequence stri ng Repr esenta ti on length (unsi gned long) fo ll ow ed by elements i n order length (unsi gned long) fo ll ow ed by characters in o rder (can al so can have w i de characters) ar ra y stru ct enumer ated uni on arr ay elem ents i n order ( no l ength speci f ied b ecause i t is fi xed) in t he or der o f declarati on o f the comp onents unsigned l ong (the v al ues are specif ied by t he order d ecl ared) ty pe tag f ol lowe d b y the selected m emb er

Mensagem em CORBA CDR index in sequence of bytes 0 3 4 7 8 11 12 15 16 19 20-23 24 27 4 bytes 5 "Smit" "h " 6 "Lond" "on " 1934 notes on representation length of string Smith length of string London unsigned long The flattened form represents a Person struct with value: { Smith, London, 1934} struct Person { string name; string city; unsigned long year; };

Marshalling em CORBA O código gerado automaticamente a partir das definições em IDL das operações Converte os parâmetros e valores de retorno das operações Seguindo as regras de representação CORBA CDR Stub marshalling de parâmetros e unmarshalling do valor de retorno Skeleton: vice-versa

Inclusão de informações de tipo no Marshalling Se dados empacotados (marshalled) devem incluir informações de seus tipos Informar se o tipo, por exemplo, é int ou um array No caso de CORBA são incluídos apenas os valores Considera-se que o cliente já saibam os tipos dos dados e a ordem de chegada destes dados Entretanto, XML e Java inclui tanto os tipos quanto os próprios dados

Serialização em Java Transformação de um objeto Java para uma seqüência de bytes Informações de tipo e classe dos objetos são incluídas na forma serializada Permitem a reconstrução dos objetos sem conhecimento prévio de suas classes Processo recursivo: serializa todos os objetos referenciados pelo objeto em questão Classes precisam implementar a interface Serializable Objetos remotos: a referência é serializada

Serialização em Java Forma de disponibilização ao usuário Classes ObjectOutputSream e ObjectInputStream e seus respectivos métodos writeobject e readobject Classe do objeto implementa a interface Serializable Conteúdo do formato serializado Nome da classe Versão da classe (quando são feitas alterações na classe) Referências a outros objetos (handles) Valores das instâncias das variáveis

Formato de serialização Java Objetos (instância de uma classe Java) e valores de dados primitivos podem ser passados como argumentos e resultados de invocações de método Ex.: struct Person public class Person implements Serializable { } private String name; private String place; private int year; public Person(String aname, String aplace, int ayear) { name = aname; place = aplace; year = ayear; } // seguido dos métodos para acessar as vaiáveis de instância

Formato de serialização Java Serializando a instância de objeto Person: Person p = new Person( Smith, London, 1934); Serialized values Explanation Person 8-byte version number h0 class name, version number 3 int year java.lang.string name: java.lang.string place: number, type and name of instance variables 1934 5 Smith 6 London h1 values of instance variables O formato serializado na prática contém marcadores de tipos de dados adicionais h0 and h1 são handles

Formato de serialização Java Serialização e desserialização geralmente são operações feitas automaticamente pelo middleware Java oferece meios para o programador personalizar a serialização Exemplo é o uso da palavra-chave transient que serve para informar que uma variável não deve ser serializada Arquivos ou sockets

XML (Extensible Markup Language) Linguagem de marcação assim como HTML Definir documentos estruturados para a Web Os itens de dados são rotulados com strings de marcação Diferente do HTML, permite que os usuários definam suas próprias tags (Extensível)

XML (Extensible Markup Language) Usos de interesse aqui: definir a interface de serviços Web prover a representação externa de dados na comunicação entre clientes e serviços Representação textual: independente de plataforma Representação hierárquica Textual e Auto-descritiva: tags, esquemas e namespaces Desempenho inferior comparado com CORBA CDR

Definição da estrutura Pessoa em XML tag <person id="123456789"> <name>smith</name> <place>london</place> <year>1934</year> atributo <!-- a comment --> </person > elementos Atributos: rotular dados Elementos: container para dados

Namespaces Permitem definir contextos para os marcadores (tags) utilizados em um documento Referenciados através de URLs Evitam choques de nomes de tags em contextos diferentes As tags name, place e year podem ser usadas em diferentes documentos <person pers:id="123456789" xmlns:pers = "http://www.cdk4.net/person"> <pers:name> Smith </pers:name> <pers:place> London </pers:place > <pers:year> 1934 </pers:year> </person>

Esquemas XML Definem: os elementos e atributos que podem aparecer em documentos XML (i.e., um vocabulário) como os elementos são aninhados a ordem, o número e o tipo dos elementos Usados para validar documentos XML Um mesmo esquema pode ser compartilhado por vários documentos

Um esquema XML para a estrutura Pessoa xsd:schema xmlns:xsd = URL of XML schema definitions > <xsd:element name= "person" type ="persontype" /> <xsd:complextype name="persontype"> <xsd:sequence> <xsd:element name = "name" type="xs:string"/> <xsd:element name = "place" type="xs:string"/> <xsd:element name = "year" type="xs:positiveinteger"/> </xsd:sequence> <xsd:attribute name= "id" type = "xs:positiveinteger"/> </xsd:complextype> /xsd:schema>

Referências de Objetos Remotos Num sistema distribuído, um processo servidor pode conter vários objetos remotos Necessário uma maneira de identificar um objeto remoto de forma única dentro de um sistema distribuído Necessária quando objetos remotos são passados como parâmetro

Referências de Objetos Remotos Devem ser descartada quando o objeto remoto deixar de existir A referência é serializada (não o objeto) Deve conter toda informação necessária para identificar (e endereçar) um objeto unicamente no sistema distribuído. Ex.: hora da criação, nº da porta. 32 bits 32 bits 32 bits 32 bits Internet address port number time object number interface of remote object

Comunicação Cliente-Servidor Modelo geral: requisição-e-resposta Variantes: síncrona: cliente bloqueia até receber a resposta assíncrona: cliente recupera (explicitamente) a resposta em um instante posterior não sendo bloqueante Implementação sobre protocolo baseado em datagramas é mais eficiente evita: reconhecimentos redundantes, mensagens de estabelecimento de conexão, controle de fluxo

Protocolo requisição-e-resposta Client Server dooperation (wait) (continuation) Request message Reply message getrequest select object execute method sendreply

Operações utilizadas para implementar o protocolo de requisição-e-resposta public byte[] dooperation (RemoteObjectRef o, int methodid, byte[] arguments) envia uma mensagem de requisição para o objeto remoto e retorna a resposta. Os argumentos especificam o objeto remoto, o método a ser chamada e os argumentos para aquele método. public byte[] getrequest (); obtém uma requisição de um cliente através de uma porta servidora. public void sendreply (byte[] reply, InetAddress clienthost, int clientport); envia a mensagem de resposta para o cliente, endereçando-a a seu endereço IP e porta.

Estrutura de mensagens de requisição-e- resposta messagetype requestid objectreference methodid arguments int (0=Requisição, 1= Resposta) int (identifica a requisição) Referência de objeto remota int (identifica o método) array de bytes Identificador da mensagem pode ser formado a partir: requestid junto com o ID do processo remetente que fez a requisição usando por exemplo o seu endereço de IP.

Modelo de falhas Suposições processos: param após falha canais: podem omitir mensagens Uso de timeouts: em dooperation. Para detectar se a resposta (ou a requisição) foi perdida. Alternativas de tratamento: sinalizar a falha para o cliente (uma boa opção?) repetir o envio da requisição (um certo número de vezes melhor abordagem) Até ter certeza sobre a natureza da falha (quem falhou? O canal ou o processo?)

Modelo de falhas Descarte de mensagens duplicadas o servidor deve distinguir requisições novas de requisições retransmitidas RequestIDs Em caso de perda da resposta (reply), o servidor: Pode re-executar a requisição para gerar novamente a resposta, ou Pode manter um histórico das respostas geradas para o caso de precisar retransmití-las

Protocolos de troca de mensagens Nome R Request Mensagens enviadas pelo Cliente Servidor Cliente RR Request Reply RRA Request Reply Acknowledge reply

Protocolos de troca de mensagens Protocolo R: cliente transmite requisição para o servidor. Não há necessidade de retornar valor e o cliente não precisa de confirmação de recebimento Geralmente implementado sobre o protocolo UDP Protocolo RR: cliente transmite requisição e necessita de confirmação de recebimento pelo servidor. Confirmação feita pela resposta (reply) do servidor Protocolo RRA: Semelhante ao protocolo RR sendo que o servidor também necessita de confirmação de recebimento de resposta (reply) pelo cliente (acknowledge) Não bloqueia o cliente

Protocolo de transporte utilizado: UDP Leva em conta o tamanho da mensagem se sessões são curtas (apenas uma requisição e sua resposta) não compensa o overhead do handshake TCP Não oferece confiabilidade necessitando que o programador recursos de garantia de entrega de mensagens Retransmissão de mensagens Filtragem de mensagens duplicadas Histórico de respostas mantido pelo servidor

Protocolo de transporte utilizado: TCP Implementação mais fácil Não impõem limites no tamanho das mensagens na verdade, cuida da segmentação (divisão das mensagens) de forma transparente permite argumentos de tamanho arbitrário (ex.: listas) Transferência confiável lida com mensagens perdidas e duplicadas Controle de fluxo Overhead reduzido em sessões longas (muitas requisições e respostas sucessivas)

Comunicação de Grupo Processo envia a mensagem para o grupo (não para seus membros diretamente) Entrega de uma mesma mensagem, enviada por um processo, para cada um dos processos que são membros de um determinado grupo O conjunto de membros do grupo é transparente para o processo que envia a mensagem Mensagens comunicadas através de operações de multicast

Comunicação de Grupo

Aplicações da comunicação de grupo Tolerância a falhas baseada em serviços replicados Busca por serviços de descoberta em redes espontâneas Melhoria de desempenho através de dados replicados Propagação de eventos

IP Multicast É o protocolo básico para comunicação de grupo Assim como o IP (unicast): não-confiável mensagens podem ser perdidas (falha de omissão) i.e., não entregues para alguns membros do grupo mensagens podem ser entregues fora de ordem Acessível às aplicações através de UDP Grupos são identificados por: endereço IP + porta, utiliza endereços IP que iniciam por 1110 (IPv4) Processos se tornam membros de grupos, mas não conhecem os demais membros

IP Multicast (cont.) Um computador é membro de um grupo se ele possui um ou mais processos com sockets que se juntaram ao grupo: multicast sockets Camada de rede: recebe mensagens endereçadas a um grupo, se computador for membro entrega as mensagens para cada um dos sockets locais que participa do grupo processos membros são identificados pelo número de porta associado ao grupo vários processos compartilham o mesmo número de porta

API Java para IP Multicast Classe MulticastSocket Derivada de DatagramSocket Principais métodos: joingroup: método para entrar em um grupo leavegroup: método para sair de um grupo settimetolive: serve para configurar o TTL TTL (Time to live): serve para limitar a distância de propagação de um datagrama multicast pela rede Pequenas distâncias: redes locais Grandes distâncias: redes externas, Internet (uso de roteadores externos)

Processo entra em um grupo de multicast e envia e recebe datagramas import java.net.*; import java.io.*; public class MulticastPeer{ public static void main(string args[]){ // args give message contents & destination multicast group (e.g. "228.5.6.7") MulticastSocket s =null; try { InetAddress group = InetAddress.getByName(args[1]); s = new MulticastSocket(6789); s.joingroup(group); byte [] m = args[0].getbytes(); DatagramPacket messageout = new DatagramPacket(m, m.length, group, 6789); s.send(messageout); // this figure continued on the next slide

...continuação } } // get messages from others in group byte[] buffer = new byte[1000]; for(int i=0; i< 3; i++) { DatagramPacket messagein = new DatagramPacket(buffer, buffer.length); s.receive(messagein); System.out.println("Received:" + new String(messageIn.getData())); } s.leavegroup(group); }catch (SocketException e){system.out.println("socket: " + e.getmessage()); }catch (IOException e){system.out.println("io: " + e.getmessage());} }finally {if(s!= null) s.close();}

Confiabilidade e ordenação de multicast Fontes de falhas membros de um grupo podem perder mensagens devido a congestionamento (fila de chegada cheia) falhas em roteadores de multicast roteador não propaga a mensagem para os membros que estão após ele na rede Falhas de ordenação Mensagens enviadas por um processo podem ser recebidas por outros processos em ordens diferentes Mensagens enviadas por diferentes processos podem não chegar na mesma ordem em todos os demais processos

Exemplo de falha de ordenação send receive receive X 1 m 1 4 Y 2 receive send 3 m 2 receive Physical time Z receive receive send A m 3 m 1 m 2 receive receive receive t 1 t 2 t 3 45

Efeitos de falhas nas principais aplicações de comunicação de grupo Serviços replicados causa inconsistência das réplicas: nem todas as réplicas terão processado todas as requisições Busca por serviços de descoberta imune a falhas: basta que alguém responda Dados replicados depende do modelo de replicação Propagação de eventos dependente de aplicação

Conclusão sobre IP Multicast Protocolo de multicast não-confiável Uso sobre redes locais: utiliza multicast físico ex.: em redes Ethernet Uso na Internet: utiliza roteadores de multicast configurados através de algum protocolo de roteamento multicast time-to-live para limitar a propagação de mensagens