Comunicação em Sistemas
Distribuídos (parte 1/2)
Andrey Brito, Lívia Sampaio Campos Sistemas Distribuídos – 2012.3
Nos módulos anteriores...
• Sistemas Distribuídos
– Múltiplos “computadores” – Uma rede de comunicação
– Compartilhando estado (eles cooperam)
• Motivação
Nos módulos anteriores...
• Modelos: entender possibilidades
– Arquitetural: cliente-servidor, entre-pares – Interação: síncrono, assíncrono, ...
– Falhas: parada, omissão, desempenho, valor, ... – Segurança: confidencialidade, integridade,
autenticidade
• Síncrono x Assíncrono
– Robustez x portabilidade
Síncrono x Assíncrono
• Princípio da imersão: um protocolo assíncrono “herda” garantias de tempo quando imerso em um sistema síncrono
• Implícito: baixo acoplamento
– Falhas independentes
– Comunicação não-confiável – Ausência de relógio
– Atrasos de comunicação – Velocidade imprevisível
SD x Redes
• Do que falamos em redes
– Protocolos de comunicação – Tecnologias– Pacote, latência, vazão, perdas
• Do que falamos em SD
– Protocolos de cooperação – Algoritmos
Alguns conceitos relevantes
• Desempenho: depende de dois fatores
– Latência: tempo de trânsito do primeiro bit (s) – Vazão: taxa de comunicação (bits/s)
• Escalabilidade • Confiabilidade
• Qualidade de serviço • Difusão
SD x Redes (2)
• SD não depende diretamente de desempenho
ou de detalhes de baixo nível como a
implementação da difusão
• Mas essas informações pode ser relevantes
para a escolha ou construção de um protocolo
– Custo de uma difusão– Latências envolvidas
Representação dos dados
• Programas têm estruturas de dados, pacotes têm sequência de bytes
• Representação pode ter problemas com a ordem dos bytes (ex., “little-endian” vs. “big-endian”) • Conversão dos objetos em sequências de bytes
(marshalling)
– CORBA CDR, Apache Trift, Java Serialization – XML, Google Protocol Buffers
Este módulo
• Comunicação via troca de mensagens
• Comunicação orientada a eventos
• Chamadas remotas à procedimentos/métodos
• Comunicação via memória compartilhada
COMUNICAÇÃO VIA TROCA DE
MENSAGENS
Interface
• Com esta forma de comunicação, normalmente usamos primitivas chamadas “send” e “receive” • A comunicação pode ser síncrona ou assíncrona
(cuidado!) – a chamada bloqueia ou não
– Síncrona: send e receive bloqueiam até que a mensagem enviada seja recebida
– Assíncrona: send não bloqueia, receive pode ou não bloquear
Interface (2)
• Endereçamento: explícito (ex., IP + porta, IP +
protocolo, ou através de um serviço de
descoberta)
• Confiabilidade das primitivas (perdas):
não-confiável (ex., UDP) ou não-confiável (ex., TCP)
• Ordenação: com ou sem garantias (ex., UDP
vs. TCP)
Falhas de comunicação
• Omissão, ordenação, desempenho, valor
• Algumas falhas podem ser transformadas em
outras falhas: valor omissão, desempenho omissão, ordenação desempenho
• Obviamente, mais garantias, maior overhead
– Princípio fim-a-fim
– Em alguns casos é melhor ter mecanismos para lidar com falhas eventuais, do que ter garantias
Comunicação de grupo
• Comunicação entre dois processos por troca de mensagens usando “send” e “receive” é o básico • Mas em algumas situações um processo precisa
se comunicar com um conjunto de processos
– Serviço replicado para tolerância a falhas ou para desempenho
– Descoberta de serviços – Notificação de eventos
– Outros tipos de colaboração (ex., chat, paralelização)
Exemplos básicos
• Broadcast Ethernet: uma mensagem e todas as máquinas na rede local recebem
• Multicast IP: baseado em UDP, não é obrigatório para roteadores IPv4
• Broadcast IP (dentro de uma subrede)
• Todos sem confiabilidade ou ordenação, mas claramente eficientes
Multicast IP
• Faixa de endereços especiais (classe D: 1110…)
• Escopo depende do time-to-live (0: máquina
local, 1: rede local, …)
• Grupo aberto
• Roteadores pode usar uma implementação
eficiente
Protocolos de difusão
Confiabilidade
• Quando uma difusão pode dar errado?
• Quais as consequências?
Confiabilidade
• Falhas totais e parciais sempre podem acontecer
– Buffer cheio no receptor, roteador incompatível/falho, problema no remetente
• A falta de ordenação ou perda de mensagens pode levar a inconsistências em sistemas
replicados
• Variações comuns
– Difusão confiável: se algum recebe, todos recebem – Difusão ordenada: algumas garantias de ordenamento
Ordenação de mensagens
Ordenação de mensagens
• SYNC: processos bloqueiam
• CO: Causa, preserva potenciais relações de
causa e consequência
• FIFO: canal preserva ordem de envio
• Arbitrária
Protocolos de difusão – Sistema
• Máquinas se comunicam através de primitivas
ponto-a-ponto, máquinas falham apenas parando • O envio acontece através de uma primitiva
“broadcast(m)” ou “multicast(g, m)”, m é a mensagem e g é o grupo
• Além do recebimento da mensagem, existe um evento chamado “deliver”
– Receive é a primitiva da comunicação ponto-a-ponto – Deliver é a primitiva de recebimento da difusão
Comunicação ponto-a-ponto
• Comunicação confiável pode ser definida
como...
– Validade: mensagens enviadas (buffer de saída) são recebidas em algum momento (“eventually”) – Integridade: uma mensagem recebida é idêntica a
uma enviada e nenhuma mensagem é entregue duas vezes
Comunicação ponto-a-ponto
• Comunicação confiável pode ser definida
como...
– Validade: mensagens enviadas (buffer de saída) são recebidas em algum momento (“eventually”) – Integridade: uma mensagem recebida é idêntica a
uma enviada e nenhuma mensagem é entregue duas vezes
• Como implementar? Validade: acks,
Integridade: checksum, ids, criptografia
Difusão básica
• Algoritmo
B-multicast(g,m):
for each process p e g, send(p, m);
On receive (m) at p:
Difusão básica
• Algoritmo
B-multicast(g,m):
for each process p e g, send(p, m);
On receive (m) at p:
B-deliver (m) at p
• Problema: se o remetente falhar, apenas
alguns receberão
Difusão confiável
• Funciona mesmo que o remetente falhe
• Propriedades
– Integridade: um processo correto p entrega uma mensagem m apenas uma vez e esta mensagem foi enviada por algum processo
– Validade: se um processo envia m, ela será entregue em algum momento
– Concordância (agreement): se algum processo correto entrega, todos entregam (tudo ou nada)
Difusão confiável
Difusão confiável
• Integridade: um processo correto p entrega uma mensagem m apenas uma vez e esta mensagem foi enviada por algum processo
– Derivado do B-multicast: checksum, criptografia, etc.
• Validade: se um processo envia m, ela será entregue em algum momento
– Depois que o processo termina de enviar, ele entrega (deliver) a mensagem
• Concordância (agreement): se algum processo correto entrega, todos entregam (tudo ou nada)
Difusão com ordem
• Até agora não tínhamos ordem
• Alternativas
– FIFO: duas difusões feitas por um mesmo
processo, serão entregues na mesma ordem – Causal: preserva a relação “aconteceu-antes” – Total: todos os processos entregam na mesma
ordem
Difusão com ordem
Message processing Delivery queue Hold-back queue deliver When delivery guarantees areDifusão com ordem
Sistemas Distribuídos 2012.3 COPIN/UFCG/CEEI 32
F3 F1 F2 T2 T1 P1 P2 P3 Time C3 C1 C2
Difusão com ordem
• P1 precisa atrasar sua própria mensagem, para manter a ordem
• F2 nunca poderia ser entregue antes de F1 em P2 • C3 tem que ser entregue depois de C1
• Total > Causal > FIFO
– Quanto mais ordem, menos desempenho (latência, banda) – A menor garantia necessário deve ser usada