Comunicação interprocessos Sistemas distribuídos Prof. Diovani Milhorim Comunicação interprocessos Contextualização Comunicação interprocessos Introdução Sistemas distribuídos implicam em comunicação entre processos: Compartilhamento de memória (sistema realmente distribuído) Troca de mensagens Cópia de dados de um espaço de memória a outro. Passagem de mensagem Conjunto de primitivas para comunicação entre processos baseada em um protocolo de troca de mensagens. Esconde detalhes de protocolos de comunicação Tratamento de heterogeneidade Exemplos: sockets, java RMI, etc... Comunicação interprocessos Características desejáveis: Simplicidade e clareza de uso. Semântica uniforme processos locais e remotos utilizam a mesma interface de comunicação. Eficiência Baixo custo de processamento Minimizar custo de estabelecimento/manutenção de conexão Uso de piggybacking para eliminar mensagens adicionais. Confiabilidade Garantir entrega das mensagens em presença de falhas. Eliminar(tratar) replicação de mensagens. Ordenamento de mensagens Comunicação interprocessos Características desejáveis: (continuação) Correção atomicidade: todos ou nenhum recebem. Entrega ordenada: Nem todas as aplicações tem as mesmas necessidades. Segurança: Garantia de entrega. Flexibilidade mensagens chegam na mesma ordem a todos os processos. Autenticação dos pares Codificação das mensagens Portabilidade Aplicações e das bibliotecas (heterogeneidade) Comunicação interprocessos Modelos de comunicação: Duas primitivas básicas :Send e Receive Envio de mensagens: (send) Duas semânticas: Bloqueante e não bloqueante Inclusão de mensagem em uma fila remota Recepção da mensagem: (receive) Retirada da mensagem de uma fila local. Comunicação interprocessos Comunicação síncrona vs. Assíncrona Comunicação: Desvantagens da comunicação síncrona. Limitação da concorrência Possibilidade de deadlock. Vantagens da comunicação síncrona. Síncrona: Processos usam versão bloqueante da primitiva. Assíncrona: Processos usam versões não bloqueantes da primitiva. Programação simples. Vantagens e desvantagens da Assíncrona são “dual” da síncrona. Comunicação interprocessos Semântica de sincronicação send/receive Semântica do send: Bloqueante: O processo do send espera a execução do receive correspondente. Não bloqueante: O processo fonte prossegue com a execução tão logo a mensagem seja recebida (bufferizada). Semântica do receive Bloqueante: processo destino é bloqueado até que a mensagem seja recebida. Não bloqueante Processo de destino retorna da chamada tão logo seja reservada uma área de memória para recepção da mensagem. Necessidade de saber se a mensagem chegou Pooling: primitiva do tipo teste Interrupção (signal) Comunicação interprocessos Estudo de caso: Protocolos Internet e API Socket TCP e UDP usam a abstração de socket. Define um ponto de comunicação (ip e porta) Uma porta não pode ser compartilhada por vários processos. Vários processos podem enviar para uma mesma porta Comunicação interprocessos Comunicação por datagrama UDP Baseada em uma unidade de transmissão: datagrama Transmitido do remetente ao destino sem confirmação ou tentativa de reenvio. Mensagens podem não chegar. Aspectos a serem considerados. Tamanho da mensagem. Bloqueio Time-out Recepção anônima Comunicação interprocessos Aspectos da comunicação UDP: Tamanho da mensagem: Necessidade de especificar o tamanho da área de recepção. Bloqueio Geralmente Send é não bloqueante e Receive é bloqueante. Recomendável uso de threads. Time-out Se menor que o necessário – mensagem truncada Limitar tempo de espera do receive Problema: dimensionar o time-out Recepção anônima Receive não especifica uma origem, porem é possível identificar a fonte. Comunicação interprocessos Modelo de falhas UDP. Comunicação confiável implica em duas Propriedades: Datagramas UDP falham por: Validade: Qualquer mensagem é entregue a seu destino. Integridades: Mensagens não podem ser corrompidas nem duplicadas. Falhas por omissão: Mensagens podem ser perdidas ou descartadas Ordenamento:Mensagens podem ser entregues fora de ordem. Responsabilidade dos aplicativos tratarem com as falhas Comunicação interprocessos Comunicação por fluxo TCP Define a abstração de fluxo (stream) Dados podem ser lidos e escritos. Características de um fluxo TCP Não define limite de tamanho para mensagens. Efetua controle de erro. Regula controle de fluxo (regula a taxa de leitura e escrita no fluxo para prevenir overflow) Garante entrega ordenada e não duplicação dos dandos. Define a abstração de conexão como identificadores de processo origem e destino. Comunicação interprocessos Comunicação por fluxo TCP Define a abstração de fluxo (stream) Dados podem ser lidos e escritos. Características de um fluxo TCP Não define limite de tamanho para mensagens. Efetua controle de erro. Regula controle de fluxo (regula a taxa de leitura e escrita no fluxo para prevenir overflow) Garante entrega ordenada e não duplicação dos dandos. Define a abstração de conexão como identificadores de processo origem e destino. Comunicação interprocessos Aspectos na comunicação TCP Correspondência entre itens de dados Processos devem concordar quanto ao conteúdo dos dados transmitidos. Bloqueio Dados enviados em um fluxo são mantidos até serem lidos. Se um enviar n bytes como sendo inteiro o outro deve concordar Processo destino é bloqueado se tentar ler dados não disponíveis. Processo remetente é bloqueado pelo fluxo TCP se não há espaço disponível no destinatário para recepção. Threads Recomendável para simplificar programação sem bloqueio ( várias threads = vários fluxos = maiores buffers) Comunicação interprocessos Modelo de falhas do TCP Funcionamento do TCP: Validade: Usa timeout e retransmissões para tratar perda de mensagens. Integridade: Uso de checksum e número de seqüência para garantir mensagens não corrompidas nem duplicadas. Não totalmente confiáveis: Conexões TCP podem ser desfeitas: Processo não distinguem entre falha de rede e falha de processo Processos não sabem identificar ser mensagens enviadas recentemente foram recebidas ou não Comunicação interprocessos Representação externa de dados: Informação (dados) é representada em uma estrutura de dados. Na comunicação informação é igual a uma seqüência de bytes. Problema: Necessidade de conversão estrutura de dados <> seqüência de bytes. Diferentes sistemas = diferentes estruturas de dados. Ex. Cod ASC versus Unicode, pontos flutuantes, etc... Solução: Conversão para um formato de dados acordado (external data representation) Enviar no formato do emissor e incluir informação sobre o formato empregado. Comunicação interprocessos Princípio da representação externa de dados: Comunicação interprocessos Marshalling: Processo de converter uma coleção de dados e organizá-los em um formato próprio para transmissão. Idéia é que seja feito sem envolvimento explicito da aplicação. Responsabilidade do midleware. Duas técnicas básicas Unmarshalling é o processo contrário. Conversão de dados para um formato binário Conversão de dados para um formato texto (ASCII) Exemplos: Corba, serialização Java e XML Comunicação interprocessos Corba: Define 15 tipos básicos de dados e 6 construtores para os tipos mais complexos. Básicos: short, long, unsigned, float, double, etc.. Complexos: string, array, struct, etc... Dados são escritos atráves dos tipos e o midlleware executa o (un)marshalling via sua IDL (Interface definition language) Baseado na representação para um formato binário. Comunicação interprocessos Serialização de objetos java Transformação de um objeto em uma seqüência de bytes. Comunicação de objetos via socket (RMI) Armazenamento em disco Como é disponibilizado ao usuário. ObjectOutputStream e ObjectInputStream + métodos writeObject / readObject. Classe do objeto implementa a interface serializable Métodos DefaultWriteObject e DefaultReadObject. Formato binário Nome da classe Assinatura da classe Instância das variáveis. Comunicação interprocessos eXtensible Markup Language (XML) Codificação textual para descrever estrutura e aparência Baseada em marcas tag Descrevem a estrutura lógica Associação por atributo-valor dos dados Comunicação interprocessos Leitura recomendada: Coulouris – capitulo 4