Post on 17-Apr-2015
Desenvolvimento de Aplicações Distribuídas
Walfredo CirneUniversidade Federal de Campina Grande
http://walfredo.dsc.ufcg.edu.br
Roteiro
• Conceitos e características
• Arquiteturas
• Modelos de programação
• Problemas
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
aplicação centralizada
máquina 1
aplicação distribuída
máquina 1 máquina 2 máquina n
. . .
Exemplo: Web
Requisição HTTP
Resposta à requisiçãoHTTP
BrowserServidorWeb
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
Cliente-Servidor
Requisição
Resposta à requisição Cliente Servidor
Aplicações em Várias Camadas
Servidor Web
Servidor BD
Browser Web
Peer-to-Peer
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
Gerente de objetos eServiço de nomes(rmiregistry)
Cliente
objeto
stub cliente
skeleton
2. requisita objeto
1. cria e registraobjeto
3. retornareferência
criados pelocompilador destubs (rmic)
4. comunicação
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();
Exemplo de Troca de Mensagem
• Protocolo– GET <arg>– POST <arg>– DONE
SimpleClient
1. Send Command
2. Read Response
SimpleServer
1. Read Command
2. Send Result
<command>
<response>
• 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?
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
Firewall+ NAT
IP privadoServidor
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!!!