desenvolvimento de aplicações distribuídas walfredo cirne universidade federal de campina grande

30
Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande http://walfredo.dsc.ufcg.edu.br

Upload: internet

Post on 17-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Desenvolvimento de Aplicações Distribuídas

Walfredo CirneUniversidade Federal de Campina Grande

http://walfredo.dsc.ufcg.edu.br

Page 2: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Roteiro

• Conceitos e características

• Arquiteturas

• Modelos de programação

• Problemas

Page 3: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

. . .

Page 4: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Exemplo: Web

Requisição HTTP

Resposta à requisiçãoHTTP

BrowserServidorWeb

Page 5: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 6: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

É 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

Page 7: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Roteiro

• Conceitos e características

• Arquiteturas– Cliente-servidor– Várias camadas– Peer-to-peer– Híbridas

• Modelos de programação

• Problemas

Page 8: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Cliente-Servidor

Requisição

Resposta à requisição Cliente Servidor

Page 9: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Aplicações em Várias Camadas

Servidor Web

Servidor BD

Browser Web

Page 10: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Peer-to-Peer

Page 11: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Modelos Híbridos (Exemplo: Email)

Mail Transfer Agent

User Agent

Page 12: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 13: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 14: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 15: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 16: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Pequeno Exemplo RMI

• Interface

• Servidor

• Cliente• rmic Aritmetica.class gera:

– Aritmetica_Stub.class– Aritmetica_Skel.class

• Objetos precisam ser Serializable para poderem ser transferidos

Page 17: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 18: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 19: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 20: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 21: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 22: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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)

Page 23: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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();

Page 24: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 25: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

Roteiro

• Conceitos e características

• Arquiteturas

• Modelos de programação

• Problemas– Novos modos de falha– Testes difíceis– Firewalls e endereços privados

Page 26: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 27: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 28: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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?

Page 29: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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

Page 30: Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande

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!!!