Baixe o app para aproveitar ainda mais
Prévia do material em texto
Comunicação Inter-Processos Eduardo Adilio Pelinson Alchieri Middleware É uma camada de software cujo objetivo é mascarar a heterogeneidade e fornecer um modelo de programação conveniente para os programadores de aplicativos. É composto por um conjunto de processos ou objetos, em um grupo de computadores, que interagem entre si de forma a implementar comunicação e oferecer suporte para compartilhamento de recursos a aplicativos distribuídos. Ele simplifica as atividades de comunicação de programas aplicativos por meio do suporte de abstrações como a invocação a métodos remotos, a comunicação entre objetos de dados compartilhados entre computadores e replicação de objetos de dados compartilhados. Exemplo: CORBA, RMI Java, DCOM da Microsoft. Middleware - Camadas RPC, RMI Plataforma Aplicações, Serviços MiddlewareProtocolo baseado em requisição-resposta e Representação Externa de Dados e Empacotamento Middleware - Funções Provê transparência quanto à localidade Chamada a procedimento local = chamada a procedimento remoto O cliente não sabe onde o procedimento está Invocação de um objeto local = invocação de um objeto remoto O cliente não sabe onde o objeto está Provê independência com relação Protocolos de comunicação Sistemas operacionais Hardware Middleware no Contexto da Internet TCP/IP Middleware UDP e TCP Aplicações, Serviços Comunicação em Sistemas Distribuídos A passagem de mensagem entre um par de processos pode ser suportada por duas operações: send e receive; Para ter comunicação, um processo envia (send) uma mensagem para um destino, e o outro processo recebe (receive). Os remetentes fazem as mensagens serem adicionadas em filas remotas (buffers) e os processos destino removem mensagens de suas filas locais. Origem Destino Po Pd 1. send 2. receive mensagem Características da Comunicação - Primitivas Bloqueantes e Não-Bloqueantes As primitivas de troca de mensagens podem ser classificadas em: Características da Comunicação - Comunicação Síncrona Se a primitiva é send bloqueante então o processo que está enviando fica bloqueado enquanto a mensagem estiver sendo enviada. A instrução seguinte à chamada send não será executada até que a mensagem tenha sido completamente enviada. De maneira similar, uma chamada para receive não retorna o controle até que a mensagem tenha sido realmente recebida e colocada no buffer de saída. Características da Comunicação - Comunicação Assíncrona Operação send é não-bloqueante Processo de envio ocorre em paralelo à transmissão de mensagens Operação receive pode ser Não-bloqueante Parece ser mais eficiente, mas ela envolve uma complexidade extra no processo destino - a necessidade de ler uma mensagem recebida fora de seu fluxo normal de execução. Bloqueante Em sistemas que suportam múltiplas threads em um único processo, a operação não tem desvantagem, pois o recebimento pode ser feito por uma thread, enquanto outras threads continuam ativa. Características da Comunicação - Comunicação Assíncrona Se send é não-bloqueante ele devolve o controle ao processo que chamou imediatamente, antes do envio da mensagem. A vantagem é que o processo que envia a mensagem pode continuar processando em paralelo com a transmissão da mensagem. Todavia, o transmissor não pode modificar o buffer até que a mensagem tenha sido enviada. Caracteristicas da Comunicação – Destino da Mensagem Um cliente deve conhecer o endereço de um servidor para enviar-lhe uma mensagem Existem diversas formas de endereçamento de processos: – Indicar a máquina e o número do processo – Deixar o processo escolher um número e localizá-lo através de um broadcast – Procurar o endereço do processo através de um servidor de nomes Caracteristicas da Comunicação – Destino da Mensagem Um cliente deve conhecer o endereço de um servidor para enviar-lhe uma mensagem Existem diversas formas de endereçamento de processos: – Indicar a máquina e o número do processo – Deixar o processo escolher um número e localizá-lo através de um broadcast – Procurar o endereço do processo através de um servidor de nomes Caracteristicas da Comunicação – Destino da Mensagem Nos protocolos internet as msgs são enviadas para destinos identificados pelo par: (endereço IP, porta local) Uma porta local é um destino de msg, especificado como um valor inteiro; Qualquer processo que saiba o número de uma porta pode enviar uma mensagem para ela; Geralmente, os servidores divulgam seus números de porta para os clientes acessarem; Se o cliente usa um endereço IP fixo para se referir a um serviço, então esse serviços sempre deve ser executado no mesmo computador para que seu endereço permaneça válido. – Para proporcionar transparência de localização, pode-se utilizar um serviço de nomes. Caracteristicas da Comunicação – Confiabilidade e Ordenação Comunicação confiável diz respeito a validade e integridade Quanto a validade: – Um serviço de msg ponto a ponto pode ser descrito como confiável se houver garantia que as msgs são entregues, independente de um número razoável de pacotes que possam ter sido eliminados ou perdidos. – Em contraste, um serviço de msg ponto a ponto pode ser descrito como não confiável se não houver garantia de que as mensagens são entregues. Quanto a integridade – As msgs devem chegar não corrompidas e sem duplicação. Ordenação: – Garantia que as msgs sejam entregues na ordem de emissão Comunicação através de sockets ● Socket é uma abstração que representa um ponto de destino para a comunicação entre processos. ● As duas formas de comunicação (UDP e TCP) usam socket. ● A comunicação consiste em transmitir uma mensagem entre um socket de um processo e um socket de outro processo. ● Para que um processo receba mensagens, seu socket deve estar vinculado a uma porta local e a um endereço IP do computador em que é executado. ● As msgs enviadas para um endereço IP e um número de porta em particular só podem ser recebidas por um processo cujo socket esteja associado a esse endereço e a esse número de porta. Comunicação através de sockets Origem Destino mensagem Outras portas Porta conhecida PP socket Porta cliente socket Comunicação através de sockets Diversos problemas devem ser resolvidos pelo programador; – Representação de dados (heterogeneidade); – Endereçamento (transparência da distribuição). Sockets são usados para dois processos (objetos) trocarem mensagens; – Um computador é o SERVIDOR Abre o socket e escuta a espera de comunicações – O outro computador é o CLIENTE Através de seu socket encaminha mensagem ao servidor para iniciar uma comunicação Comunicação através de sockets Device Driver e Hardware IP UDP TCP socket Aplicações Comunicação através de sockets - UDP ● Datagramas UDP são transmitidos sem conexão e sem confiabilidade garantida ● Em caso de falhas, datagramas podem não chegar aos destinos ● Aspectos relevantes ● Tamanho da mensagem ● O processo destino precisa especificar um vetor de bytes de um tamanho específico para receber as mensagens. ● O protocolo IP permite datagramas de até 216 bytes (64KB) ● Entretanto, a maioria dos ambientes impõem uma restrição de 8KB. ● Aplicatico que exija msgs maiores do que o tamanho máximo, deve fragmentá-las em porções desse tamanho ● Bloqueio (comunicação assíncrona) ● Sockets UDP provêm send não-bloqueante e receive bloqueante ● Timeouts ● A recepção bloqueante é conveniente para servidores que estejam esperando por requisições dos seus clientes. ● Não é adequado esperar indefinidamente. Dar limites é uma boa estratégia. Comunicação através de sockets – UDP – Modelo de Falhas ● Omissão ● Mensagens podem ser descartadas ● Pois pode ocorrer erros de soma de verificação (checksun) ou não haver espaço disponível no buffer, na origem ou destino ● Incluem omissão deenvio e omissão de recepção ● Ordenação ● Mensagens podem chegar fora da ordem ● Os aplicativos que usam datagramas UDP podem efetuar seus próprios controles para atingir a qualidade de comunicação confiável que suas finalidades exigem (Ex.uso de confirmação) ● Uso de UDP: ● DNS (Domain Name Service) e VOIP (Voice Over IP) Comunicação através de sockets – TCP ● Fluxos (streams) TCP são transmitidos com conexão e confiabilidade garantida. ● Aspectos relevantes ● Tamanhos de mensagens ● Quantidade de dados a tratar é definida dinamicamente pelo aplicativo. ● Mensagens perdidas ● TCP usa o esquema de confirmação (ACKs). ● Controle de fluxo ● Tenta combinar a velocidade dos processos que lêem e escrevem em um fluxo. ● Duplicação e ordenação de mensagens ● Identificadores são associados a cada mensagem. ● Destinos da mensagem ● Após o estabelecimento de conexão, os processos se comunicam sem a necessidade de endereços IP e portas. Comunicação através de sockets – TCP ● A API para comunicação por fluxo pressupõe que, quando dois processos estão estabelecendo uma conexão, um deles desempenha o papel de cliente e o outro de servidor, mas daí em diante eles podem ser iguais. ● O papel de cliente envolve a criação de um socket de fluxo vinculado a qualquer porta e depois um pedido connect solicitando uma conexão a um servidor, em uma porta determinada. ● O servidor envolve a criação de um socket de “escuta”, vinculado a porta de serviço, para esperar que os clientes solicitem conexões. ● Quando o servidor aceita uma conexão, um novo socket de fluxo é criado para que o servidor se comunique com um cliente. ● Mantendo seu socket na porta de serviço para receber os pedidos de connect de outros clientes. Comunicação através de sockets – TCP ● Quando um servidor aceita uma conexão, geralmente, uma nova thread é criada para a comunicação com o novo cliente ● O servidor pode bloquear quando estiver esperando dados, sem atrasar os outros clientes. Origem Destino connect PP socket ServidorCliente accept Comunicação através de sockets – TCP – Modelo de Falhas ● Para garantir ● Integridade ● Somas de verificação para detectar e rejeitar pacotes corrompidos ● Número de seqüência para detectar e rejeitar pacotes duplicados ● Validade ● Timeouts e retransmissão para tratar com pacotes perdidos ● Em caso de queda da conexão ● Processos não distinguem entre falha na rede e falha no processo ● Processos não têm conhecimento se msgs recentes foram recebidas ou não. ● Uso de TCP: ● HTTP, FTP, SMTP e Telnet Representação Externa de Dados e Empacotamento ● Informações armazenadas nos programas em execução são representadas como estruturas de dados ● Informações presentes nas mensagens são seqüências de bytes. ● Possibilidades para a representação de dados ● Valores convertidos para um formato externo, acordado entre as partes, e convertido para a forma local, na recepção. ● Valores transmitidos no formato da origem, junto com a informação do formato usado, e o destino converte os valores se necessário. ● Empacotamento (marshalling) ● Processo de pegar um conjunto de itens de dados e montá-los em uma forma conveniente para transmissão em uma mensagem. ● Compreende a tradução de itens de estruturas de dados e valores primitivos para uma representação externa de dados. Representação Externa de Dados e Empacotamento ● CORBA CDR (Common Data Representation) ● Serialização de objetos em Java ● XML (eXtensible Markup Language) RPC, RMI Plataforma Aplicações, Serviços MiddlewareProtocolo baseado em requisição-resposta e Representação Externa de Dados e Empacotamento Representação Externa de Dados e Empacotamento - CDR ● O CDR (Common Data Representation) do CORBA é a representação externa de dados definida pelo CORBA ● Os valores são transmitidos na ordem do remetente, que é especificada em cada mensagem. ● Se exigir uma ordem diferente, o destinatário a transforma. ● O empacotamento pode ser gerado automaticamente a partir da especificação dos tipos de ítens a serem transmitidos ● CORBA IDL (Interface Definition Language) descreve todos os tipos de estruturas de dados e de ítens de dados primitivos Representação Externa de Dados e Empacotamento - Serialização ● Em Java RMI, tanto objetos como valores de dados primitivos podem ser passados como argumentos e resultados de invocações de método. ● Serialização em Java se refere à atividade de simplificar um objeto, ou um conjunto de objetos conectados, em uma forma seqüêncial conveniente para ser armazenada em disco ou transmitida numa mensagem. ● A desserialização consiste em restaurar o estado de um objeto ou conjunto de objetos a partir de sua forma serializada. ● Interface java.io.Serializable ● A serialização e a desserialização geralmente são executadas automaticamente pela camada de middleware, sem nenhuma participação do programador do aplicativo. Representação Externa de Dados e Empacotamento - XML ● A XML (eXtensible Markup Languagem) é uma linguagem de marcação que foi definida pelo consórcio WWW para uso na web. ● O termo linguagem de marcação refere-se a uma codificação textual que representa um texto e os detalhes de sua estrutura ou de sua aparência. ● A linguagem XML é definida como o formato universal para dados estruturados na Web. ● A XML é usada para permitir que clientes se comuniquem com serviços web e para definir as interfaces e outras propriedades desses mesmos serviços; ● Usada também no arquivamento e na recuperação de sistemas; ● Embora um repositório XML possa ser maior que seu equivalente binário, ele tem a vantagem de poder ser lido em qualquer computador Comunicação em Grupo ● Grupo: é um conjunto de processos que atuam juntos, de maneira especificada pelo sistema ou por um usuário; ● Os grupos geralmente são dinâmicos. ● Comunicação: Um-para-Muitos (Multicast ) ou Muitos-para- Muitos (Broadcast) ● A comunicação em grupo é uma operação que permite o envio de uma mensagem para cada um dos membros de um grupo de processos; ● Assim, os membros participantes do grupo ficam totalmente transparentes para o remetente. Comunicação em Grupo ● As mensagens em grupo fornecem uma infra- estrutura útil para a construção de SD, com as características: ● Tolerância à falha baseada em serviços replicados; ● Localização dos servidores de descoberta na interligação em rede; ● Melhor desempenho através da replicação de dados; ● Propagação de notificações de evento. Comunicação em Grupo ● Aspectos do Projeto ● Grupos Fechados x Grupos Abertos ● Grupos Igualitários x Hierárquicos ● Grupos Centralizado x Distribuído Comunicação em Grupo ● Tipos de Grupos: ● Fechados: Somente os membros de um grupo podem enviar msg para o grupo. ● Abertos: Processos não pertencentes ao grupo podem enviar msg para o grupo. ● Estruturação Interna: ● Igualitário: Todos os processos são iguais. As decisões são tomadas coletivamente. ● Vantagem: Simétrico nenhum ponto de falha; ● Desvantagem: A tomada de decisão é mais difícil. ● Hierárquico: Presença de um coordenador, cuja missão é dirigir o trabalho dos demais processos. ● Vantagem: Decisões rápidas; ● Desvantagem: Perda do coordenador para o grupo. Comunicação em Grupo ● Controle dos Membros de um Grupo ● Deve existir algum método para criar e eliminar grupos, bem como para permitir que processos sejam incluídos ou excluídos de grupos: ● Centralizado ● Distribuído. ● Centralizado: ● Implementa um servidor de grupos, p/ o qual todas as solicitações devem ser enviadas. ● Servidor de Grupos: ● Cria e extingue grupos. ● Inclui e retira membros de grupos. ● Possui uma base de dados completa sobre todos os grupos e membros. ● Vantagem: Simples, eficiente e fácil de implementar; ● Desvantagem: Um único ponto de falha. Comunicação em Grupo ● Distribuído: ● Todos os membros do grupo são responsáveis pela gerência. ● Para deixar um grupo, por exemplo, um membrosimplesmente envia uma mensagem a todos os demais membros do grupo. ● Vantagem: Não há um único ponto de falha, decisão mais democrática; ● Desvantagem: Maior complexidade na gerência, maior tempo nas tomadas de decisão. Invocação Remota (resumo) ● RPC, Objetos Distribuídos e RMI RPC: Remote Procedure Call Objetivos: – Permitir que os clientes chamem procedimentos localizados em outras máquinas (servidores); Fazer com que uma chamada remota se pareça tanto quanto possível com uma chamada local; Mascarar as diferenças de representação de dados – Nenhuma operação de troca de mensagem ou de entrada/ saída deve ser visível ao programador (transparência). Serviço: – Pode ser visto como um módulo com uma interface que exporta um conjunto de procedimentos apropriados para operar sobre qualquer estrutura de dados ou recursos; Modelo Básico Linguagem de Definição de Interface – Características dos procedimentos: nome dos procedimentos, tipos de seus argumentos e valores de retorno. – Compiladores de interfaces geram para diferentes linguagens alvo: Stubs: tratam cada procedimento definido na interface. Concretizam operações de serialização e deserialização dos dados. Especificação do Serviço - IDL Compilador STUB do Cliente STUB do Cliente STUB do Servidor STUB do Servidor RPC: Remote Procedure Call Características das Interfaces IDL de RPCs – Passagem de Parâmetros: passagens por valor e por referência em chamadas locais não são de todo muito apropriadas em SD: Ponteiros não podem ser passados como argumento porque não tem sentido em espaços de endereçamentos diferentes. – A definição de uma interface de servidor descreve parâmetros de entrada in e de saída out ou, às vezes, e com duplo sentido inout; RPC em uma Aplicação Distribuída Cliente Ch am ada Retorno Servidor Deserializaçãoreceive Chamada Re tor noSerialização Deserialização sendreceive REDE Stub do Cliente Stub do servidor Serialização send protocolo request/reply Despachante Programa cliente chama o stub como uma chamada localStub do cliente constrói a mensagem que será enviada – marshaling dos argumentos, adiciona um identificador Módulo de comunicação envia a mensagemDespachante: de acordo com o identificador seleciona um dos procedimentos da stub do servidor Stub do servidor deserializa os argumentos e chama o procedimento do servidor. Servidor executa o procedimento e retorna o resultado para o stub Stub do servidor serializa os argumentos de saída (out) da resposta (reply). Módulo de comunicação envia a mensagemStub do cliente deserializa a resposta e entrega ao cliente Programação da Aplicação Distribuída CompiladorCompilador CompiladorCompilador Definições em Comum Especificação do Serviço - IDLEspecificação do Serviço - IDLPrograma Cliente Programa Servidor (procedimentos) STUB do Cliente STUB do Servidor CompiladorCompilador Servidor Executável Cliente Executável Instalação e Funcionamento do RPC A instalação e funcionamento do RPC têm três fases básicas: – Processamento da Interface: integrar os mecanismos de RPC com os programas cliente e servidor em uma linguagem convencional; – Binding (ligação): localizar um servidor para um serviço particular; – Serviço de Nomes onde os servidores se registram – Comunicação: a comunicação entre programa cliente e programa servidor, usando Stubs que executam os marshaling e unmarshaling formando as requisições/respostas (modelo cliente/servidor) em nível mais baixo sobre protocolos de comunicação (rede); RPC em uma Aplicação Distribuída RPC: Não é possível (ou não faz sentido) passar referencias de objetos como parâmetros; Solução: – RMI: No modelo objeto distribuído temos então uma interface remota que especifica métodos de um objeto distribuído. – A grande diferença da interface que usa RMI de um RPC é que objetos podem ser passados como argumentos e resultados de métodos. – Referência remota de objetos. RMI: Remote Method Invocation Modelo Objeto Objetos: conjunto de métodos (operações) e dados que interagem entre si invocando métodos, passando argumentos e recebendo resultados. – Para invocar um método, uma referência e o nome de um método devem ser apresentados, juntos com os argumentos necessários. Uma interface: define assinaturas de métodos (que são os tipos de seus argumentos, de seus valores de retorno e exceções) sem especificar suas implementações. – Uma classe pode suportar mais de uma interface. O estado de um objeto corresponde aos valores de suas variáveis de instância. No paradigma OO, o estado de um programa é particionado em estados de seus objetos. – A distribuição de objetos em hosts de um sistema distribuído é uma extensão natural ao modelo OO. Conceitos base para RMI Remote Object Reference: Para chamar métodos (acessar) de um objeto remoto é necessária a referência do objeto remoto. – Encapsula todos os dados necessários para acessar o objeto. – Referências remotas de objetos podem ser passadas como argumentos e resultados de invocações de métodos. Interfaces Remotas: Interface que especifica métodos que podem ser invocados de um objeto remoto. – Objetos locais e remotos podem chamar métodos de uma interface especificada como remota. – Interfaces não possuem construtores. CORBA possui uma IDL própria. No JavaRMI interfaces remotas estendem a uma interface Remote. Interfaces CORBA e Java suportam herança de interfaces. Modelo RMI Cliente Servidor Rede Proxy Objeto Estado Métodos Mesma Interface Skeleton Invoca método X Skeleton invoca o método X no Objeto. Passagem de Parâmetros (referências) Máquina A Objeto Local O1 Mensagem a ser enviada para servidor C Máquina B Objeto Remoto O2 Máquina C Nova referencia local Cópia de O1 Invocação remota com L1 e R1 referencia local L1 referencia remota R1 Cópia de R1 para O2 Estudo de caso: JavaRMI Estende o modelo de objetos Java fornecendo suporte para objetos distribuídos em Java. – Objetos invocam métodos em objetos remotos (RMI) usando a mesma sintaxe como em chamadas locais. – Verificações de tipos e outras propriedades da linguagem são também verificadas em chamadas remotas como em locais. Uma chamada remota é perfeitamente identificada porque este deve manusear exceções remotas (RemoteExceptions). Interfaces remotas são definidas como extensão de uma interface Remote fornecida pelo pacote java.rmi. Estudo de caso: JavaRMI Todas as assinaturas de métodos de uma interface possuem declarados RemoteException. – Todos os método remotos podem gerar esta exceção; Problemas com a conexão. Interfaces são compartilhadas entre clientes e servidores interface Product extends Remote { public String getDescription() throws RemoteException; } Estudo de caso: JavaRMI No lado do cliente para que a comunicação seja concretizada um stub (referência de objeto remoto) deve ser adiquirida: Product p = ...; String d = p.getDescription(); No lado do servidor a classe que implementa a interface está presente: public class ProductImpl extends UnicastRemoteObject Implements Product { public ProductImpl (String d) throws RemoteException{ descr = d;} public String getDescription() throws RemoteException { return “I am “ + descr + “. Buy me!”;} Classe UnicastRemoteObject usa TCP/IP e herda classe superior RemoteServer – Mecanismos para comunicação entre objetos servidores e stubs remotos. Estudo de caso: JavaRMI RMIregistry: binder para o Java RMI. – Instâncias do RMIregistry devem se executar sobre cada computador servidor que hospeda objetos remotos. Este serviço não é um binder global que atenda toda a dimensão de um sistema: os clientes fazem seus lookups nos hosts dos serviços desejados. – Mantém uma tabela mapeando nomes textuais em referências de objetos remotos sobre o computador. – Esta tabela é acessada por métodos da classe Naming,que possuem como argumentos uma URL da forma: //computerName:port/objectName Estudo de caso: JavaRMI Servidor precisa se registrar se quiser exportar interfaces: //servidor ProductImpl p1 = new ProductImpl(“microondas”); Naming.bind(“microondas”, p1) O código do cliente obtém o stub para acessar: Product p =(Product) Naming.lookup(“rmi://seuservidor.com:1099/microondas”) As URLs de RMI começam com rmi:// e são seguidos de um endereço de servidor, um número de porta opcional (usa padrão 1099), outra barra e o nome do objeto. Servidor.java rmic Escreve servidor Escreve interface javac Servidor_Proxy.class Servidor.class RMIregistry java Servidor ServidorCliente Servidor_Proxy.class Escreve cliente Cliente.java javac Cliente.class java Cliente Cliente Servidor Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47 Slide 48 Slide 49 Slide 50 Slide 51 Slide 52 Slide 53
Compartilhar