Desenvolvimento de Aplicações Distribuídas

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

description

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. - PowerPoint PPT Presentation

Transcript of Desenvolvimento de Aplicações Distribuídas

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