Sistemas Distribuídos 11 Objetivos Este capítulo apresenta uma introdução aos sistemas distribuídos em geral Arquiteturas de cliente servidor Características das arquiteturas de 2 e 3 camadas Ambiente de computação distribuída: RPC, serviços, interfaces e mensagens Remote Procedure Call Messaging Object Oriented Remote Method Invocation Soluções emergentes 2 2003 Helder L. S. da Rocha 1-1
Por que implementar um sistema distribuído? Para compartilhar recursos entre usuários! Cliente interage com usuário final Servidor interage com recursos compartilhados Cliente comunica-se com servidor Que tipo de arquitetura cliente-servidor usar? Motivação Ambiente de computação distribuída abstrai detalhes da comunicação em rede Usa protocolos de comunicação que isolam os detalhes da camada de transporte Que tipo de ambiente de computação distribuída usar? 3 Histórico Mainframe monolítico(anos '70) 1. Cliente e servidor em única camada 2. Apresentação em terminais de "telas verdes" diretamente ligados a computador que permite acesso multi-usuário Sistemas cliente-servidor em 2 camadas 1. Aplicações de mainframe separadas em cliente e servidor 2. Sistemas de arquivos compartilhados 3. Sistemas de bancos de dados compartilhados 4. Cliente-servidor em 2 camadas: cliente é GUI, servidor é sistema de banco de dados 5. Cliente-servidor em 3 camadas: cliente é GUI, middleware é aplicação, servidor é banco de dados 4 2003 Helder L. S. da Rocha 1-2
Evolução Sistema Monolítico Apresentação do Usuário Apresentação do Usuário Cliente/Servidor 2 camadas Apresentação do Usuário Cliente/Servidor 3 camadas Apresentação do Usuário 5 Comparação: 2 e 3 camadas Admin do Sistema Segurança Encapsulation of data Performance Duas camadas Complexa (há mais lógica no cliente para manter) Baixa (segurança a nível de dados) Baixa (representação de dados precisa ser exportada) Baixa (É preciso enviar muitos comandos SQL pela rede e o cliente tem que lidar com as respostas) Três camadas Menos Complexo (a aplicação pode ser gerenciada no servidor) Alta (pode ser refinada para abranger o método ou atributo) Alta (cliente chama serviços ou métodos e ignora sua implementação) Boa (Somente requisições de serviços são enviados entre o cliente e servidor) Fonte: [6] 6 2003 Helder L. S. da Rocha 1-3
Comparação: 2 e 3 camadas Escalabilidade Reuso de aplicações Integração com aplicações legadas Facilidade de desenvolvimento Duas camadas Baixa (muitas ligações entre o cliente e o servidor) Poor (aplicação monolítica reside no cliente) Não (é preciso gerenciar comunicação a partir do cliente) Mais simples Três camadas Excelente (pode distribuir cargas através de múltiplos servidores) Excelente (pode reutilizar serviços, procedimentos, objetos) Sim (serviços e objetos podem ser encapsulados em gateways ou adaptadores) Mais complexo (É preciso gerar mais código e dar manutenção nesse codigo. Pode melhorar com ferramentas) Fonte: [6] 7 Onde concentrar a funcionalidade? Servidor gordo: mais funcionalidade do lado do servidor. Ex: Web Cliente gordo: mais funcionalidade do lado do cliente. Ex: Banco de dados Middleware: ajuda a emagrecer cliente e servidor e reduz responsabilidades de ambos GUI Cliente gordo Aplicação Servidor gordo Dados Fonte: [6] 8 2003 Helder L. S. da Rocha 1-4
Ambiente de Computação Distribuída Linguagens permitem vários níveis de abstração para comunicação em rede Baixo nível (camada de transporte): soquetes - aplicações estão cientes da existência da rede Alto nível (camadas de sessão, apresentação e aplicação): RPC, messaging e RMI - aplicações chamam operações de rede como se fossem locais Soluções de alto nível permitem ambiente de computação distribuída Aplicações tratam a rede como se fossem um grande computador, e podem tem suas partes espalhadas em outras máquinas 9 Métodos de comunicação Síncrono: cliente chama o procedimento e espera pelo retorno RPC chamada Assíncrono: cliente não espera pelo fim do procedimento Messaging chamada operacao() continua operacao() espera fim fim continua 10 2003 Helder L. S. da Rocha 1-5
Remote Procedure Call (RPC) Nome genérico para soluções que permitem a clientes chamarem procedimentos remotos como se fossem procedimentos locais Uma camada de abstração acima dos protocolos de transportes (TCP) A Open Software Foundation padronizou (1992) uma solução independente de fabricante chamada Distributed Computing Environment (DCE) com Suporte a RPC Interface Definition Language (IDL) padrão Diversos serviços: diretório, segurança, sistema de arquivos distribuído, XDR (representação de dados) 11 Arquitetura RPC Cliente chama procedimentos locais no stub do cliente Stub comunica-se com ambiente de execução que transforma os dados em formato neutro e envia-o para a camada de transporte que repassa os dados para o servidor usando protocolo de transporte (como soquetes TCP/IP) Ambiente de execução no servidor decodifica os dados, monta a chamada e passa para o stub do servidor que faz a chamada no procedimento remoto Quando o procedimento termina, valor retornado faz o mesmo caminho inverso Fonte da imagem: http://msdn.microsoft.com 12 2003 Helder L. S. da Rocha 1-6
IDL - Interface Definition Language Linguagem neutra usada para definir interfaces dos procedimentos remotos Define nome, tipos de parâmetro, tipos de retorno OSF IDL (usado em DCE RPC) é baseado em C Ferramentas do fabricante do ambiente RPC compilam IDL e usam para gerar os stubs do cliente e servidor Exemplo de IDL struct Data { long dia; long mes; long ano; }; Data getdata( void ); Cliente IDL Compilador Servidor Stub Cliente Stub Servidor 13 Messaging Método de comunicação baseado em troca de mensagens Assíncrono Mensagens contém toda a informação: não há interface previamente definida - aplicação que recebe a mensagem precisa saber o que fazer com ela Ambiente de computação distribuída baseado em mensagens é formado por Message Oriented Middleware (MOM / Message Queue) que age como mediador Clientes remetentes Clientes destinatários Destinos conhecidos pelos participantes 14 2003 Helder L. S. da Rocha 1-7
RPC orientado a objetos: RMI Em um ambiente OO, verdadeiro ambiente de computação distribuída requer que haja transparência na chamada de métodos remotos Estender características de linguagens orientadas a objetos para rede Objetos distribuídos permitem chamada remota de métodos (Remote Method Invocation - RMI) Várias soluções proprietárias: COM/DCOM, Java RMI Open Management Group (OMG) padronizou CORBA - arquitetura para ambiente comum de objetos distribuídos Situação atual das tecnologias se baseia em servidores de aplicações com acesso transparente a serviços Componentes: baixo acoplamento e alto reuso Enterprise JavaBeans (baseado em CORBA) e COM+ Jini: interface altamente dinâmica 15 Web Services Ambiente de computação distribuída baseado no padrão XML da W3C Protocolo baseado em XML "IDL" baseado em XML Registro de serviços baseado em XML Tem como objetivo maior a integração Formato dos dados quando convertido pelo stub é texto! Ainda é uma solução bastante nova Problemas de performance ainda não resolvidos Poucos serviços, poucas ferramentas Parte essencial da arquitetura.net da Microsoft 16 2003 Helder L. S. da Rocha 1-8
Peer to Peer Ponto-a-ponto: solução de computação distribuída onde todos os participantes são clientes e servidores ao mesmo tempo Duas pessoas podem iniciar a rede e trocar arquivos, recursos, capacidade computacional Quanto mais pessoas estiverem usando a rede, mais rápida, mais eficiente e mais rica ela fica Vários produtos voltados à transferência de arquivos Napster, Kazaa, Gnutella, etc. JXTA: coleção de protocolos independentes de dispositivo e plataforma para P2P Grid! 17 Grid Computing "Forma de computação distribuída que envolve a coordenação e compartilhamento de recursos computacionais, aplicações, dados, armazenamento e rede através de organizações dinâmicas e geograficamente dispersas" [grid.org] Ainda no início (não há padrões nem produtos), mas tem despertado grande interesse Grid hoje concentra-se principalmente no compartilhamento de poder computacional Exemplo: SETI@Home - 14 TeraFlops (14 trilhões de operações de ponto flutuante por segundo) - 500 mil anos de tempo de processamento em um ano e meio. 18 2003 Helder L. S. da Rocha 1-9
Fontes [1] Raman Khanna (Editor). Distributed Computing - Implementation and Management Stategies. Prentice-Hall, 1994. [2] Open Group. DCE 1.1: Remote Procedure Call. Aug 1997 http://www.opengroup.org/products/publications/catalog/c706.htm [3] R. Srinivasan. RFC 1831 - Remote Procedure Call version 2. Sun Microsystems. August 1995 [4] Object Management Group. http://www.omg.org [5] Helder da Rocha. J433 - Minicurso de Aplicações Distribuídas em Java. 2000. http://www./cursos/java/j433 [6] Trevor Young. Client-Server Software Architecture. University of British Columbia. 09/2003. http://www.ugrad.cs.ubc.ca/~cs410/lectures/ [7] GRID.org. http://www.grid.org [8] Project JXTA. http://www.jxta.org 19 Versão 1.0 2003, Helder da Rocha www. 20 2003 Helder L. S. da Rocha 1-10