300 likes | 414 Views
Desenvolvimento de Aplicações Distribuídas. Walfredo Cirne Universidade Federal de Campina Grande http://walfredo.dsc.ufcg.edu.br. Roteiro. Conceitos e características Arquiteturas Modelos de programação Problemas. aplicação centralizada. aplicação distribuída. máquina 1. máquina 1.
E N D
Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande http://walfredo.dsc.ufcg.edu.br
Roteiro • Conceitos e características • Arquiteturas • Modelos de programação • Problemas
aplicação centralizada aplicação distribuída . . . máquina 1 máquina 1 máquina 2 máquina n O que é uma Aplicação Distribuída? • Uma aplicação que executa simultaneamente em várias máquinas • Um grupo de processos que executa em máquinas distintas e trabalha de forma coordenada e cooperativa para realizar uma determinada tarefa
Por que Aplicações Distribuídas? • Quando o problema é distribuído • Dados e usuários distribuídos • O computador como meio de comunicação • Tolerância a falhas • Melhor desempenho via paralelismo • Melhor aproveitamento do hardware
É só para Software Básico? • Não!!! • Acesso ao banco de dados remoto • Sistemas que rodam em várias localidades • Comunicação com fornecedores, parceiros e governo • Applet se comunicando com um servlet
Roteiro • Conceitos e características • Arquiteturas • Cliente-servidor • Várias camadas • Peer-to-peer • Híbridas • Modelos de programação • Problemas
Aplicações em Várias Camadas Browser Web Servidor Web Servidor BD
Modelos Híbridos (Exemplo: Email) Mail Transfer Agent User Agent
Roteiro • Conceitos e características • Arquiteturas • Modelos de programação • Acesso remoto ao Banco de Dados • Objetos distribuídos • Invocação de métodos remotos • Troca de mensagens • Problemas
Acesso Remoto ao Banco de Dados • A forma mais simples de se construir uma aplicação distribuída • Separação entre o cliente e o servidor é natural • Não se implementa o servidor • Por exemplo, em Delphi, ao instanciar TDataBase setando os atributos para referenciar um Banco de Dados remoto, está se criando uma aplicação distribuída
Objetos Distribuídos • Objetivos • Poder interagir com um objeto localizado em uma máquina remota como se ele fosse local • Poder construir um objeto em uma máquina e transmiti-lo para outra • Sistema de Suporte a Objetos Distribuídos (SSOD) • Java RMI • CORBA • DCOM
Endereços e Portas • Cada máquina na Internet possuí um endereço IP único • 150.165.98.38 = minha máquina • Os processos que rodam em uma dada máquina são endereçados por portas • 80 = web • 25 = email
Pequeno Exemplo RMI • Interface • Servidor • Cliente • rmic Aritmetica.class gera: • Aritmetica_Stub.class • Aritmetica_Skel.class • Objetos precisam ser Serializable para poderem ser transferidos
Arquitetura Java RMI Servidor deObjetos 1. cria e registraobjeto objeto Gerente de objetos eServiço de nomes(rmiregistry) skeleton criados pelocompilador destubs (rmic) 4. comunicação 3. retornareferência stub cliente Cliente 2. requisita objeto
Componentes de um SSOD • Mecanismo para especificação das interfaces dos objetos e geração de skeletons e stubs • IDL, Java, COM Language, etc. • Gerente de objetos • ORB, Registry Service • Serviço de Nomes • bind, lookup • Protocolo de comunicação entre objetos remotos
RMI CORBA • O fato do RMI ser baseado em Java trás todos os benefícios da linguagem Java • Integração Java + RMI é muito mais “limpa” • Independência de plataforma • O RMI é mais fácil de ser dominado, CORBA tem um grande número de interfaces e detalhes que dificultam o domínio
RMI CORBA • RMI é totalmente baseado em Java, dificultado a integração com código escrito em outra linguagem • A única forma de realizar essa integração é através do uso de uma interface de código nativo Java • CORBA foi desenvolvido para ser independente de linguagem • As interfaces dos objetos são especificadas em uma linguagem independente de linguagem de programação • A descrição da interface pode ser compilada para qualquer linguagem de programação
Invocação de Procedimentos Remotos • Permite a chamada a procedimentos que executam em uma máquina remota • Parecido com objetos distribuídos • Só que para linguagens que não suportam orientação a objetos • Comumente chamado de RPC
Troca de Mensagens • Processos que compõem a aplicação distribuída podem também se comunicar pela troca de mensagens • Nível de abstração mais baixo que outras formas de desenvolver aplicações distribuídas • Base de implementação de vários protocolos importantes (ex: HTTP, SMTP)
Estabelecendo a Conexão • Servidor “escutando” por conexões na porta 5000: ServerSocket s = new ServerSocket(5000); while (true) { Socket clientConn = s.accept(); InputStream in = clientConn.getInputStream(); OutputStream out = clientConn.getOutputStream(); } • Cliente: InetAddress addr = InetAddress.getByName(“anjinho.dsc.ufpb.br”); Socket s = new Socket(addr, 5000); InputStream in = s.getInputStream(); OutputStream in = s.getOutputStream();
<command> SimpleClient 1. Send Command 2. Read Response SimpleServer 1. Read Command 2. Send Result <response> Exemplo de Troca de Mensagem • Protocolo • GET <arg> • POST <arg> • DONE • Servidor • Cliente
Roteiro • Conceitos e características • Arquiteturas • Modelos de programação • Problemas • Novos modos de falha • Testes difíceis • Firewalls e endereços privados
Novos Modos de Falhas • Em uma aplicação distribuída, parte da aplicação pode falhar • Software tem que lidar com novas exceções • Há situações em que se quer fazer progresso mesmo com falhas • Mas como garantir a reintegração dos componentes que falharam, uma vez que estes tenham sido consertados
Tolerância a Falhas • Um sistema distribuído tem mais componentes que um sistema centralizado • Se a quebra de qualquer componente derruba o sistema, a disponibilidade será ruim em um sistema distribuído • Há técnicas de replicação para resolver isso, mas raramente são usadas • Problema resolvido para redes locais • Mas tem um custo
Testes Difíceis • Testes automáticos tem se mostrado fundamentais para produção de software de boa qualidade • Se você estiver interessado sobre o assunto, veja minha palestra sobre XP • Em uma aplicação distribuída: • Como montar o cenário para o teste de forma automática? • Como lidar com o não-determinismo intrínseco da distribuição?
Servidor Firewall+ NAT IP privado Firewalls e Endereços Privados • Firewalls e endereços privados impedem a comunicação fim-a-fim sem gateways a nível de aplicação • A Internet está ficando mais complicada
Extra: Exemplos do Estado-da-Arte • Consistent Hashing • Distributed Data Structures • Os créditos vão para meus alunos de Aplicações Distribuídas • Obrigado!!!