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

Transcript of Desenvolvimento de Aplicações Distribuídas Walfredo Cirne Universidade Federal de Campina Grande...

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