Tópicos em Sistemas Distribuídos Modelos de Comunicação
Comunicação em SD Comunicação entre processos Sockets UDP/TCP Comunicação em grupo Broadcast Multicast
Comunicação entre processos Conceitos básicos troca de mensagens (send e receive) comunicação síncrona e assíncrona (bloqueante e não bloqueante) endereçamento (endereço + porta) confiabilidade comunicação confiável validade: garantia de entrega integridade: mensagens não corrompidas, sem duplicação ordenação algumas aplicações tratam mensagens recebidas fora de ordem como falha
Sockets abstração em nível de aplicação define um canal de comunicação entre processos localização dos processos endereço (IP) + porta (processo) protocolos UDP e TCP
UDP utiliza datagramas não utiliza acks ou retransmissões para garantir a entrega de mensagens operação receive: mensagem + identificação do emissor. características: tamanho das mensagens: 64 kbytes (utilizado 8 kbytes) send não bloqueante e receive bloqueante permite utilizar timeouts para tratar falhas receive from any não existe conexão com um único processo
UDP Modelo de falhas o checksum garante a integridade das mensagens mensagens podem ser perdidas durante a transmissão não é garantida a ordenação das mensagens Vantagens do protocolo UDP baixo overhead não há necessidade de armazenamento de informações sobre fonte e destino Ex. DNS
TCP canal de comunicação onde os dados podem ser lidos ou escritos (stream de bytes) principais características tamanho das mensagens: qualquer tamanho (a quebra de mensagens é tratada internamente) garantia de entrega de mensagens: utilização de acks (janela deslizante) controle de fluxo: velocidade de leitura do receptor e escrita do emissor (pode bloquear o emissor) trata duplicação de mensagens e ordenação: associa identificadores a cada pacote IP troca de mensagens: é estabelecida uma conexão entre dois processos
TCP Comunicação usando streams de bytes é necessário a concordância entre os processos em relação aos tipos e ordem dos dados enviados utiliza controle de fluxo evitando o descarte de mensagens (estouro do buffer de recebimento) para cada nova conexão é utilizada uma thread para tratar o cliente permitindo a concorrência de processos pode ser utilizada multiplexação (função select() do UNIX) Modelo de falhas: checksums, números de seqüência, uso de timeouts e retransmissões conexão quebrada (broken): não é possível verificar se houve falha na rede ou no processo; não é possível afirmar se as mensagens foram ou não enviadas
Questões Quais são os problemas no desenvolvimento de sistemas distribuídos usando sockets TCP ou UDP? Considere fatores como: Heterogeneidade, flexibilidade, tolerância a falhas, etc Como estes problemas podem ser tratados?
Comunicação em grupo Comunicação de um processo com um grupo de processos (por exemplo, um serviço gerenciado por diversos servidores) usar comunicação ponto a ponto: INEFICIENTE! solução: comunicação em grupo O processo emissor tem conhecimento somente sobre o grupo, mas não sobre cada participante do grupo. (transparência)
Utilização em S.D. Serviço replicado (tolerância a falhas) o cliente envia uma única requisição para o grupo de servidores que implementam o mesmo serviço de forma replicada Descoberta de servidores utilizados pelos servidores para registrar um serviço e pelos clientes para achar um serviço
Utilização em S.D. Replicação de dados (melhor desempenho) a obtenção de dados localizados em servidores replicados permite um melhor desempenho (servidor mais próximo ou menos sobrecarregado responde) Propagação de eventos (notificação) a mensagem é enviada ao grupo para dizer que algum evento ocorreu (por exemplo, informar um grupo de usuários sobre uma nova mensagem postada em um newsgroup)
Características Dinamicidade criação e destruição de grupos entrada e saída de processos de um grupo Multiplicidade processo pode fazer parte de diversos grupos simultaneamente Abstração e transparência os processos se comunicam com o grupo, e não com diversos processos Implementação depende do HW multicast, broadcast
Características Grupos abertos / grupos fechados permitir / proibir que um processo não pertencente ao grupo envie uma mensagem para o grupo acesso a servidores replicados / computação paralela para resolver um problema Grupos peer / grupos hierárquicos decisões coletivas / existe uma hierarquia de processos simétrico sem ponto único de falha / ponto único de falhas (coordenador) tomada de decisão mais complexa / coordenador decide pelo grupo
Características Gerência do grupo servidor centralizado / distribuído operações criação / destruição de grupo inserção / remoção de processo tratar a queda de processos (sem mensagem de remoção!) períodos de comunicação e configuração
Características Confiabilidade Atomic: a mensagem é recebida por todos os processos, ou por nenhum processo Reliable: é feito o possível para enviar a mensagem para todos os processos, mas isto não é garantido Unreliable: é enviada somente uma mensagem sem garantia de recebimento
Características Ordenação (Atomic, Reliable) Ordenação absoluta: as mensagens são recebidas na mesma ordem em que foram enviadas. Ordenação consistente: a ordem de recebimento das mensagens é a mesma para todos os participantes do grupo, mesmo se não for a ordem de envio. Ordenação de causa: se o envio de uma mensagem causa o envio de outra mensagem, então as mensagens são enviadas aos participantes do grupo na mesma ordem.
Questões Quando utilizar comunicação em grupo? Cite um exemplo. Qual a diferença entre Broadcast e Multicast? Em que casos podemos usar um ou outro? Diferencie confiabilidade atomic, reliable e unreliable. Diferencie ordenação absoluta, consistente e de causa.