Sistemas Distribuı́dos Comunicação II Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina – IFSC campus São José [email protected] http://docente.ifsc.edu.br/mello 27 de março de 2017 1/30 Revisão das aulas anteriores 2/30 Alguns pontos na comunicação cliente/servidor Protocolo de comunicação Podem ser definidos como acordos/regras para comunicação Podem ser orientados a conexão ou não (Ex: TCP x UDP) Modelo de comunicação cliente/servidor Servidores oferecem serviços aos clientes Paradigma pedido e resposta Implementação: Socket, RPC e RMI 2/30 Alguns pontos na comunicação cliente/servidor Endereçamento Como localizar o servidor? Conhecimento prévio, broadcast ou serviço de nomes Bloqueante x não bloqueante Sı́ncrono – emissor/receptor fica bloqueado até enviar/receber mensagem Assı́ncrono – emissor não fica bloqueado e o retorno também não bloqueia Área de armazenamento temporário (buffer) - com x sem Servidor precisa ficar esperando uma mensagem antes que o cliente possa enviá-la (consumo imediato) Cliente envia para uma área de armazenamento temporário e o servidor depois consulta esta área 3/30 Alguns pontos na comunicação cliente/servidor Confiável x não confiável Canal não confiável: exige confirmação de todas mensagens (pedido e resposta) – aplicação fica responsável Canal confiável: a resposta pode atuar como uma confirmação do pedido Comunicação confiável pode delegar para os mecanismos de transporte lidarem com mensagens perdidas Servidor concorrente x sequencial Sequencial: servidor atende um pedido por vez Concorrente: servidor dispara uma thread ou processo filho para lidar com cada pedido que chega 4/30 Receber (pull) ou enviar (push) Cliente: modelo pull (receber) Cliente responsável por obter dados do servidor (envia pedido) Ex: HTTP Vantagem: servidor não precisa manter estado Dificuldade: escalabilidade limitada Servidor: modelo push (enviar) Servidor envia dados para o cliente Ex: Streaming de vı́deo Vantagem: mais escalável Dificuldade: servidor precisa manter estado 5/30 Comunicação em grupo: um para muitos Algumas caracterı́sticas Caracterı́sticas de um grupo estáticos ou dinâmicos abertos ou fechados Endereçamento de um grupo Multicast, broadcast Multicast na camada da aplicação (unicast) Atomicidade, ordenação de mensagens e escalabilidade 6/30 Objetos distribuı́dos e invocação de métodos remotos 7/30 Objetos distribuı́dos e invocação de métodos remotos Chamada Remota de Procedimento – RPC Permite que processos locais realizem chamadas de procedimentos que estão localizados em outras máquinas 7/30 Objetos distribuı́dos e invocação de métodos remotos Chamada Remota de Procedimento – RPC Permite que processos locais realizem chamadas de procedimentos que estão localizados em outras máquinas Invocação de Métodos Remotos – RMI Semelhante ao RPC, porém voltado para objetos distribuı́dos Usufrui do paradigma da programação orientada a objetos Estende o conceito de referência de objetos para um ambiente global distribuı́do Objeto residente em um processo pode invocar métodos de um objeto residente em um outro processo 7/30 RPC vs RMI Semelhanças entre RPC e RMI Diferenças entre RCP e RMI 8/30 RPC vs RMI Semelhanças entre RPC e RMI Fazem uso de linguagem de descrição de interfaces (IDL) São construı́dos sobre protocolos pedido e resposta Oferecem o mesmo nı́vel de transparência ao desenvolvedor Diferenças entre RCP e RMI 8/30 RPC vs RMI Semelhanças entre RPC e RMI Fazem uso de linguagem de descrição de interfaces (IDL) São construı́dos sobre protocolos pedido e resposta Oferecem o mesmo nı́vel de transparência ao desenvolvedor Diferenças entre RCP e RMI Com o RMI o desenvolvedor poderá usufruir das facilidades da POO objetos, classes, herança, . . . Objetos possuem uma referência única em todo o sistema Oferece maior riqueza na semântica quando passados como parâmetros Objetos podem ser passados nos parâmetros por referência (e não somente por valor) 8/30 RMI Modelo orientado a objeto Atributos de objetos são acessados através de seus métodos Interfaces Provê a definição de um conjunto de métodos, sem no entanto prover implementação para os mesmos Arquiteturas de sistemas de objetos distribuı́dos Cliente e servidor um objeto ao invocar um método de um objeto distribuı́do resulta em enviar uma mensagem pela rede e aguardar por uma resposta Replicação Um mesmo objeto pode ser replicado em todas as máquinas do SD, trazendo benefı́cios de desempenho e propiciando uma tolerância a faltas 9/30 Modelo de objetos distribuı́dos Cada processo possui uma coleção de objetos, os quais estão aptos a receber invocações locais ou remotas Referência de objeto remoto um objeto só poderá invocar métodos de outros objetos que este possuir a referência Interface remota cada objeto remoto possui uma interface que especifica quais de seus métodos poderão ser invocados remotamente 208 CHAPTER 5 REMOTE INVOCATION objetos dentro de um mesmo processo poderão invocar os métodos remotos e também os locais Figure 5.13 A remote object and its remote interface remoteobject remote interface Data { m1 m2 m3 implementation of methods m4 m5 m6 Remote interfaces: The class of a remote object implements the methods of its remote interface, for example as public instance methods in Java. Objects in other processes can 10/30 Modelo de objetos distribuı́dos Coletor automático de lixo Se a linguagem permitir (p.e. Java), a coleta de lixo distribuı́da é possı́vel através da interação entre os coletores locais Se a linguagem não permitir (p.e. C++), então cabe ao desenvolver se preocupar em liberar a memória de objetos remotos que não são mais usados Exceções Qualquer invocação remota poderá falhar e assim deverá disparar exceções servidor onde está objeto distribuı́do fica indisponı́vel servidor está muito ocupado para responder resposta pode ser perdida 11/30 Implementação RMI Módulo de comunicação (no cliente e servidor) Responsável pela comunicação entre cliente e servidor Módulo de referência de objetos remotos (no cliente e servidor) Responsável por traduzir as referências entre objetos remotos e locais Proxy (no cliente) Faz com que as invocações remotas sejam transparentes para o cliente Ao receber uma inovação local, este encaminha uma mensagem para o objeto remoto Servants (no servidor) Instância da classe que provê o objeto remoto Responsável por receber as invocações remotas 12/30 Implementação RMI Skeleton (no servidor) Associado a uma classe de um objeto remoto – é onde estão as implementações dos métodos da interface remota Atividades de empacotamento e desempacotamento acontecem aqui Dispatcher (no servidor) Um servidor possui um skeleton e um dispatcher para cada classe de 10 CHAPTER REMOTE INVOCATION objeto5 remoto que prover. igure 5.15 The role of proxy and skeleton in remote method invocation invocar o método no skeleton Responsável por: receber um pedido do módulo de comunicação; e server client object A proxy for B Request skeleton & dispatcher for B’s class remote object B Reply Communication Remote reference module module Communication module Remote reference module servant 13/30 all the marshalling and unmarshalling are the concern of the RMI software, discussed Implementações de modelos de objetos distribuı́dos CORBA Linguagem de Descrição de Interface: CORBA IDL Compilador IDL para diferentes linguagens de programação: Python, C++, Java Implementações: JacORB, R2CORBA, TAO, VBOrb, omniORB Java RMI Linguagem de Descrição de Interface: Interfaces Java Objetos remotos e programas clientes devem ser escritos em Java 14/30 Java RMI Serviço de registro pode ser iniciado na linha de comando: rmiregistry & ou dentro do código Java: 1 Registry registro = LocateRegistry.createRegistry(PORTA); 15/30 Exemplo RMI: Contador distribuı́do Interface Java que deve ser compartilhada pelo cliente e servidor 2 3 4 5 6 package std; public interface ContadorDistribuido extends Remote{ public void incrementa() throws RemoteException; public int obtemValor() throws RemoteException; } Implementação da Interface pelo Servidor 7 8 9 package std; public class Contador implements ContadorDistribuido{ public int valor = 0; 10 public void incrementa() throws RemoteException { this.valor++; } public int obtemValor() throws RemoteException { return this.valor; } 11 12 13 14 15 16 17 } 16/30 Exemplo RMI: Contador distribuı́do – Servidor 18 19 20 21 22 package std; public class Servidor{ public static void main(String[] args){ try { Contador c = new Contador(); 23 System.setProperty("java.rmi.server.hostname","IP-do-servidor"); ContadorDistribuido stub = (ContadorDistribuido) UnicastRemoteObject.exportObject(c, 0); 24 25 26 Registry registro = LocateRegistry.createRegistry(1234); registro.bind("MeuContador", stub); 27 28 29 System.out.println("Servidor pronto!"); 30 31 } catch (Exception e) { System.err.println("erro: " + e.toString()); } 32 33 34 35 36 } } 17/30 Exemplo RMI: Contador distribuı́do – Cliente 37 38 39 40 41 42 package std; public class Cliente{ public static void main(String[] args){ try { Registry registro = LocateRegistry.getRegistry("IP-servidor", 1234); ContadorDistribuido stub = (ContadorDistribuido) registro. lookup("MeuContador"); 43 System.out.println("valor: " + stub.obtemValor()); stub.incrementa(); System.out.println("valor: " + stub.obtemValor()); 44 45 46 47 } catch (Exception e) { System.err.println("erro: " + e.toString()); } 48 49 50 } 51 52 } 18/30 Comunicação por mensagens 19/30 Comunicação transitória por mensagens Embora RPC e RMI contribuam para esconder a comunicação no sistema distribuı́dos (transparência), estes assumem que ambas as partes estarão ativas no mesmo instante para permitir a comunicação 19/30 Comunicação transitória por mensagens Embora RPC e RMI contribuam para esconder a comunicação no sistema distribuı́dos (transparência), estes assumem que ambas as partes estarão ativas no mesmo instante para permitir a comunicação Server socket bind listen accept Synchronization point socket read write close Communication connect write read close Client 19/30 Comunicação persistente por mensagens Middleware orientado a mensagem (MOM) – sistema de fila de mensagens Provê suporte a comunicação assı́ncrona e persistente Cliente e servidor não precisam estar ativos no mesmo instante para permitir a troca de mensagens Comunicação entre aplicações é feita por meio de filas de mensagens Mensagens podem ser roteadas por diversos servidores intermediários e eventualmente ser entregue ao destino 20/30 Comunicação persistente por mensagens Middleware orientado a mensagem (MOM) – sistema de fila de mensagens Provê suporte a comunicação assı́ncrona e persistente Cliente e servidor não precisam estar ativos no mesmo instante para permitir a troca de mensagens Comunicação entre aplicações é feita por meio de filas de mensagens Mensagens podem ser roteadas por diversos servidores intermediários e eventualmente ser entregue ao destino 20/30 Modelo de fila de mensagens Comunicação persistente e assı́ncrona – desacoplamento temporal Mensagens ficam armazenadas até que o receptor possa consumi-las Emissor só tem garantia que a mensagem será eventualmente inserida na fila do receptor Quando a mensagem será consumida ou se será consumida, isto depende do comportamento do receptor Sender running Sender running Sender passive Sender passive Receiver running Receiver passive Receiver running Receiver passive (a) (b) (c) (d) 21/30 Interface básica para sistemas de filas de mensagens PUT Colocar uma mensagem em uma fila GET Se a fila estiver vazia ficará bloqueada até chegar mensagem. Remove a primeira mensagem que estiver na fila POLL Verificar se existe mensagem em uma fila especı́fica e remover a primeira. Neste caso, não fica bloqueado NOTIFY Definir uma função que será invocada sempre que uma mensagem for inserida na fila 22/30 Arquitetura básica de um sistema de filas de mensagens Cada fila possui um identificador único em todo o sistema distribuı́do e as mensagens são destinadas para uma fila Filas são distribuı́das por diversas máquinas Identificar cada fila implica em fazer um mapeamento para endereços de rede e portas Cada máquina oferece uma interface para o envio e recepção de mensagens Máquinas clientes podem estar ligadas a uma ou mais máquinas servidoras responsáveis pelo encaminhamentos de mensagens (roteamento) 23/30 Organização de um sistema de filas de mensagens com roteadores Sender A Application Application Receive queue R2 Message Send queue Application R1 Receiver B Application Router 24/30 Java Message Service – JMS API que permite a criação, envio, recebimento e leitura de mensagens de forma confiável, assı́ncrona e com baixo acoplamento temporal Uma aplicação JMS é composta por Clientes – enviam e recebem mensagens Mensagens – informações a serem trocadas Objetos administrados – objetos para serem usados pelos clientes Provedor – é o sistema de mensagens com funções de administração e controle da aplicação Modos de operação ponto a ponto publish/subscribe 25/30 Modo Ponto a Ponto Mensagens são mantidas nas filas até que alguém as consuma ou até que expirem Cada mensagem possui um único consumidor 26/30 Modo publish/subscribe Produtores e consumidores podem publicar e assinar tópicos Quando uma mensagem é publicada em um determinado tópico, o JMS distribui esta mensagem para todos os assinantes A mensagens ficam retidas nos tópicos até serem entregues a todos os assinantes 27/30 Outras implementações de comunicações por mensagens Advanced Message Queuing Protocol – AMQP Padrão aberto para middleware orientado à mensagens – enfileiramento, roteamento ponto-a-ponto ou pub-sub, confiabilidade e segurança Apache ActiveMQ Apache Qpid RabbitMQ ZeroMQ Message Queue Telemetry Transport – MQTT Padrão ISO baseado em uma versão leve do publish-subscribe para ser usado sobre TCP/IP – ambientes que exigem código pequeno & taxa de transmissão baixa Mosquitto 28/30 Exercı́cio: Sistema de e-mails DNS 1 0 0 1 0 1 0 1 REMETENTE Servidor Local Servidor Remoto caixa postal dos usuários 1 0 0 1 0 1 0 1 DESTINATÁRIO 29/30 Exercı́cio: Sistema de e-mails DNS TP M 1. S 1 0 0 1 0 1 0 1 REMETENTE Servidor Local Servidor Remoto caixa postal dos usuários 1 0 0 1 0 1 0 1 DESTINATÁRIO 29/30 Exercı́cio: Sistema de e-mails a ult ns co ome 2. n DNS TP M 1. S 1 0 0 1 0 1 0 1 REMETENTE Servidor Local Servidor Remoto caixa postal dos usuários 1 0 0 1 0 1 0 1 DESTINATÁRIO 29/30 Exercı́cio: Sistema de e-mails a ult ns co ome 2. n 3. DNS SMTP P MT 1. S 1 0 0 1 0 1 0 1 REMETENTE Servidor Local Servidor Remoto caixa postal dos usuários 1 0 0 1 0 1 0 1 DESTINATÁRIO 29/30 Exercı́cio: Sistema de e-mails a ult ns co ome 2. n 3. P MT 1. S 1 0 0 1 0 1 0 1 REMETENTE DNS SMTP 4. armazena Servidor Local Servidor Remoto caixa postal dos usuários 1 0 0 1 0 1 0 1 DESTINATÁRIO 29/30 Exercı́cio: Sistema de e-mails a ult ns co ome 2. n 3. DNS SMTP 5. PO P MT P 1. S 1 0 0 1 0 1 0 1 REMETENTE Servidor Local Servidor Remoto caixa postal dos usuários 1 0 0 1 0 1 0 1 DESTINATÁRIO 29/30 Exercı́cio: Sistema de e-mails a ult ns co ome 2. n 3. DNS SMTP 5. PO P MT P 1. S 1 0 0 1 0 1 0 1 REMETENTE 6. Servidor Local obtém Servidor Remoto caixa postal dos usuários 1 0 0 1 0 1 0 1 DESTINATÁRIO 29/30 Exercı́cio: Sistema de e-mails Endereçamento: Como localizar os servidores de e-mail? Bloqueante ou não bloqueante? Com área de armazenamento temporário? Confiável ou não confiável? Servidor concorrente ou sequencial? Modelo pull ou push? Modelo de comunicação em grupo? 30/30