Académique Documents
Professionnel Documents
Culture Documents
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
API para Comunicação
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Comunicação síncrona
Envio e recebimento sincronizados para cada mensagem
(operações “bloqueantes”)
send - bloqueia o processo remetente até que o receive
correspondente tenha sido executado no lado servidor
receive - bloqueia o processo de destino até a chegada
de uma mensagem
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Comunicação assíncrona
Envio e recebimento sem sincronização (operações “não-
bloqueantes”)
send
libera o processo remetente assim que a mensagem
tiver sido copiada para a fila (buffer) local;
execução e transmissão ocorrem em paralelo.
receive
libera o processo destino antes da chegada da
mensagem, a qual deve ser retirada da fila
posteriormente, através de um mecanismo de pooling
ou de notificação (callback)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Confiabilidade
Definida em termos da validade e da integridade do
serviço de comunicação
Validade: garantia de que as mensagens serão
entregues mesmo diante de um número “razoável” de
falhas de transmissão (perdas de pacotes)
Integridade: garantia de que as mensagens serão
entregues sem serem corrompidas ou duplicadas
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Ordenação
Serviço de comunicação deve garantir que as mensagens
serão entregues na ordem em que são enviadas pelo
processo remetente
Entrega fora da ordem de envio pode ser considerada
falha de transmissão por aplicações que dependem da
ordem das mensagens
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Características de Comunicação
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Programação de sockets com TCP
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
2 - 14
Comunicação usando sockets (I)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação usando sockets (II)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação usando sockets (III)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação usando sockets - UDP (I)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação usando sockets - UDP (II)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação usando sockets - UDP (III)
Modelo de falha
Checksums para detectar e rejeitar mensagens
corrompidas
Garantia de entrega e ordem de chegada fica a cargo
da aplicação
É preciso implementar tais funcionalidades
Reliable UDP
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação usando sockets - UDP (V)
Uso de UDP
Em algumas aplicações, pode ser aceitável utilizar um
serviço sujeito a falhas de omissão ocasionais (ex.: DNS,
VoIP)
Uso de UDP evita custos normalmente associados com
a garantia de entrega das mensagens:
Necessidade de armazenar informações de estado na
origem e no destino
Transmissão de mensagens extras (além dos dados
da aplicação)
Latência no envio
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Exemplos de uso em Java e C/Unix
Em Java:
API implementada em algumas classes do pacote java.net
DatagramPacket
DatagramSocket
Socket
ServerSocket
Em C/Unix:
API padrão (biblioteca de funções) para manipulação de
sockets
Definições básicas no arquivo de cabeçalho socket.h
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
API de Java com sockets sobre UDP
Principais Classes
DatagramPacket
Usada pelo cliente para construir um datagram a partir de
um array de bytes e do endereço+porta de um servidor
Usada pelo servidor para armazenar o datagram recebido
juntamente com o endereço+porta do socket cliente
DatagramSocket
Usada para criar sockets para enviar e receber datagramas
Construtores com ou sem a opção de especificar a porta
desejada (se a porta não for especificada, o sistema escolhe
uma porta disponível)
Lança exceção SocketException se a porta especificada já
estiver em uso
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Exemplo de uso no lado do cliente
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]){
DatagramSocket clientSocket = null;
String msg = args[0];
String ipDoServidor = args[1];
int port = 6789;
try {
clientSocket = new DatagramSocket();
byte[] sendArray = msg.getBytes();
InetAddress IpServidor =InetAddress.getByName(ipDoServidor);
DatagramPacket sendPacket = new DatagramPacket(sendArray, sendArray.length,
IpServidor, port);
clientSocket.send(sendPacket);
byte[] receiveArray = new byte[1000];
DatagramPacket receivePacket = new DatagramPacket(receiveArray, receiveArray.length)
clientSocket.receive(receivePacket);
String resposta = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Resposta do servidor: " + resposta);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (clientSocket != null) clientSocket.close();
} Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
} © Pearson Education 2005
Exemplo de uso no lado do servidor
importimport java.io.IOException;
import java.net.*;
class UDPServer {
public static void main(String args[]) throws Exception {
DatagramSocket serverSocket = null;
try {
serverSocket = new DatagramSocket(6789);
System.out.println("Servidor em execução!");
byte[] receiveData = new byte[1024];
while (true) {
DatagramPacket request = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(request);
String msg = new String(request.getData(), 0, request.getLength());
InetAddress ip = request.getAddress();
int port = request.getPort();
String respota = msg.toUpperCase(); // Este é o SERVIÇO prestado pelo servidor
byte[] replyData = respota.getBytes();
DatagramPacket reply = new DatagramPacket(replyData, replyData.length, ip, port);
serverSocket.send(reply);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (serverSocket != null) serverSocket.close();
} Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
} © Pearson Education 2005
Comunicação usando sockets - TCP (I)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação usando sockets - TCP (II)
Protocolos de interação
Clientes e servidores devem concordar sobre uma seqüência para
a troca de mensagens e sobre como interpretar seu conteúdo
Falta de entendimento pode causar erros de interpretação (ex.:
receber um inteiro esperando uma string) e bloqueios indevidos
(ex.: tentativa de receber mais dados do que os que foram de fato
enviados)
Operações bloqueantes
send - bloqueia o processo até que haja espaço disponível na fila
correspondente ao stream de entrada do socket de destino
receive - bloqueia o processo até que haja uma mensagem
disponível na fila correspondente ao stream de entrada do socket
local
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação usando sockets - TCP (IV)
Modelo de falha
Checksums para detectar e rejeitar mensagens corrompidas
Números seqüenciais para detectar e rejeitar mensagens
duplicadas
Temporizadores e retransmissões para lidar com perdas de
pacotes
Uso de TCP
Muitas aplicações da Internet rodam sobre conexões TCP, em portas
reservadas, incluindo:
HTTP (porta 80)
FTP (porta 20/21)
Telnet (porta 23)
SMTP (porta 25)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
API de Java com sockets sobre TCP
Socket
Usada pelo cliente para criar um socket (acoplado a uma porta
local qualquer) para ser conectado ao socket de um servidor
remoto
Lança exceção UnkownHostException se houver problemas com o
endereço do servidor, ou IOException, se houver erros de E/S
Métodos getInputStream e getOutputStream permitem acesso ao
stream de entrada e ao stream de saída, respectivamente,
associados ao socket
ServerSocket
Usada pelo servidor para criar um socket (acoplado a uma
determinada porta local) para aceitar conexões dos clientes
Método accept devolve um objeto da classe Socket, já conectado ao
socket de um cliente que tenha solicitado conexão, ou bloqueia o
servidor até que um novo pedido de conexão seja recebido
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Exemplo de uso no lado do cliente
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main (String args[]) {
Socket s = null;
try{
int serverPort = 7896;
s = new Socket(args[1], serverPort);
DataInputStream in = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
out.writeUTF(args[0]); // UTF is a string encoding see Sn 4.3
String data = in.readUTF();
System.out.println("Received: "+ data);
}catch (UnknownHostException e){
System.out.println("Sock:"+e.getMessage());
}catch (EOFException e){
System.out.println("EOF:"+e.getMessage());
}catch (IOException e){
System.out.println("IO:"+e.getMessage());
}finally {
if(s!=null){ try {s.close();} catch (IOException e){
System.out.println("close:"+e.getMessage());}
}
} Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
} © Pearson Education 2005
Exemplo no lado do servidor
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main (String args[]) {
try{
int serverPort = 7896;
ServerSocket listenSocket = new ServerSocket(serverPort);
while(true) {
Socket clientSocket = listenSocket.accept();
in = new DataInputStream( clientSocket.getInputStream());
out = new DataOutputStream( clientSocket.getOutputStream());
}catch(IOException e) {
System.out.println("Listen :"+e.getMessage());
}
}
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Exemplo no lado do servidor (cont.)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação externa de dados
Motivação:
Programas e rede manipulam dados em diferentes níveis de abstração
(abstrações de dados X seqüência de bytes)
Abstrações de dados devem ser “achatadas” (ou “serializadas”) pelo
remetente, antes da transmissão, e então reconstruídas pelo
destinatário, após o seu recebimento
Nem todos os programas utilizam a mesma forma de representação para
os mesmos tipos de dados
Diferentes conjuntos de tipos primitivos
Diferentes tamanhos (em bytes) para os mesmos tipos
Diferentes ordem de bits para tipos do mesmo tamanho
Diferentes arquiteturas para números de ponto flutuante
Diferentes padrões de caracteres (UTF-8, ASCII, Unicode, ...)
Como fazer para que programas em diferentes computadores
troquem dados de forma consistente?
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação externa de dados
Duas abordagens:
1. Remetente envia os dados no seu formato original (local), junto com
uma indicação do formato utilizado, e destinatário os converte novamente
para o seu formato local, se necessário
A favor: evita conversões desnecessárias
Contra: destinatário precisa conhecer todos os outros formatos
2. Remetente converte os dados para um formato externo (acordado
previamente) antes da transmissão, e destinatário os converte novamente do
formato externo para o seu formato local
A favor: remetente e destinatário só precisam conhecer um
único formato externo
Contra: conversões desnecessárias quando os
computadores envolvidos utilizam o mesmo formato (como
otimizar?)
Exemplos práticos: (CORBA, RMI, SOAP(XML), ProtocolBuffers)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Empacotamento e Desempacotamento (I)
Empacotamento (marshalling):
Agrupamento de um conjunto de itens de dados num formato
adequado (representação externa) para transmissão via mensagens
Desempacotamento (unmarshalling):
Re-agrupamento dos dados recebidos no formato externo para
produzir um conjunto equivalente de itens de dados no formato local
do destinatário
Realizados automaticamente pelas camadas do
middleware, sem intervenção do usuário ou programador
Necessitam da especificação detalhada dos tipos de dados a
serem transmitidos em uma linguagem apropriada (IDL, WSDL, etc)
Evitam erros de programação
Podem ser usados para outros fins (ex.: persistência)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Empacotamento/Desempacotamento (II)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação de dados - CORBA
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Exemplo de representação em CDR
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Serialização de objetos em Java
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Reflexão
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Reflexão
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação de dados externos XML
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação de dados externos XML
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação de dados externos XML
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação de dados externos XML
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação de dados externos XML
XML Schema
Exemplo de um esquema para o tipo Pessoa definido em XML Schema:
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Agenda
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação Cliente-Servidor
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Protocolo requisição-e-resposta
Client Server
Request
doOperation
message getRequest
select object
(wait) execute
Reply method
message sendReply
(continuation)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Operações utilizadas para implementar o protocolo de requisição-e-resposta
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Estrutura de mensagens de requisição-e-resposta
Identificador da mensagem
request ID + ID do processo que fez a requisição
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Representação de Referências de Objetos
interface of
Internet address port number time object number
remote object
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Modelo de falhas
Suposições
processos: colapso (falham e permanecem parados)
canais: podem omitir mensagens, mensagens não chegam em ordem
Timeouts: em doOperation
detectar que a resposta (ou a requisição) foi perdida
alternativas de tratamento:
sinalizar a falha para o cliente
repetir o envio da requisição (um certo número de vezes)
até ter certeza sobre a natureza da falha
(quem falhou? O canal ou o processo?)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Modelo de falhas (2)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Protocolos de troca de mensagens em RPC
R Request
RR Request Reply
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Protocolo de transporte utilizado: TCP
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Protocolo de transporte utilizado: UDP
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
HTTP como protocolo de requisição-e-resposta
Tipo RR
Regras para o formato de mensagens
Marshalling (empacotamento)
Conjunto fixo de métodos: PUT, GET, POST,...
Apaicáveis a todos os seus recursos
Permite negociar o tipo do conteúdo (MIME)
Conexões persistentes para amortizar o custo de abrir e fechar conexões
TCP
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Mensagem HTTP request
Linha de requisição
(comandos GET, POST, GET /somedir/page.html HTTP/1.0
HEAD ) Host: www.someschool.edu
Connection: close
Linhas de User-agent: Mozilla/4.0
cabeçalho Accept-language:fr
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Mensagem HTTP response
Linha de status
(protocolo
código de status HTTP/1.0 200 OK
frase de status) Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 1998 …...
Linhas de
cabeçalho Content-Length: 6821
Content-Type: text/html
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Códigos de status das respostas
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
GET condicional
Cliente Servidor
Razão: não enviar objeto
se a versão que o cliente HTTP request msg
já possui está atualizada If-modified-since: Objeto
<date> não
Cliente: especifica data da
versão armazenada no modificado
HTTP response
pedido HTTP HTTP/1.0
If-modified-since: <date> 304 Not Modified
<date> = Last-Modified
Servidor: resposta não HTTP request msg
contém objeto se a cópia é If-modified-since:
atualizada: <date> Objeto
HTTP/1.0 304 Not modificado
Modified HTTP response
HTTP/1.1 200 OK
<data>
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Agenda
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Comunicação de Grupo
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Aplicações da comunicação de grupo
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
IP Multicast
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
IP Multicast (cont.)
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
API Java para IP Multicast
Classe MulticastSocket
Derivada de DatagramSocket
Principais métodos:
joinGroup
leaveGroup
setTimeToLive
Veja exemplo no próximo slide
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Processo entra em um grupo de multicast e envia e recebe datagramas
import java.net.*;
import java.io.*;
public class MulticastPeer{
public static void main(String args[]){
// args give message contents & destination multicast group (e.g. "228.5.6.7")
MulticastSocket s =null;
try {
InetAddress group = InetAddress.getByName(args[1]);
s = new MulticastSocket(6789);
s.joinGroup(group);
byte [] m = args[0].getBytes();
DatagramPacket messageOut =
new DatagramPacket(m, m.length, group, 6789);
s.send(messageOut);
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Confiabilidade e ordenação de multicast
Fontes de falhas
membros de um grupo podem perder mensagens devido a congestionamento
(fila de chegada cheia)
falhas em roteadores de multicast
roteador não propaga a mensagem para os membros
que estão após ele na rede
Falhas de ordenação
Mensagens enviadas por um processo podem ser recebidas por outros
processos em ordens diferentes
Mensagens enviadas por diferentes processos podem não chegar na mesma
ordem em todos os demais processos
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Efeitos de falhas nas principais aplicações de comunicação de grupo
Serviços replicados
causa inconsistência das réplicas: nem todas as réplicas terão processado
todas as requisições
Busca por serviços de descoberta
imune a falhas: basta que alguém responda
Dados replicados
depende do modelo de replicação
Propagação de eventos
dependente de aplicação
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
Conclusão sobre IP Multicast
Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005