Baixe o app para aproveitar ainda mais
Prévia do material em texto
Parte 3 Comunicação em SD Sistemas DistribuídosSistemas Distribuídos A maior diferença entre um sistema monoprocessado e um sistema distribuído é a comunicação entre processos. Em um sistema monoprocessado: – Assume-se a existência de memória compartilhada, que é fundamental para o funcionamento de soluções para: ● Comunicação entre processos, Exclusão mútua e regiões críticas, semáforos, variáveis compartilhadas, etc Em sistemas distribuídos: – A ausência de memória compartilhada (ou a impossibilidade de garantir a disponibilidade deste recurso) obriga os componentes dos sistemas distribuídos a buscar outra solução para interagir ● Troca de mensagens ● Implica em adotar protocolos de comunicação para permitir que ambientes heterogêneos troquem mensagens Introdução Protocolos de Comunicação Protocolos são regras pré-estabelecidas para comunicação entre duas ou mais partes O uso de camadas facilita sua implementação e entendimento, já que cada camada possui responsabilidades específicas Em 1983, a International Standards Organization (ISO) desenvolveu um modelo de referência que identifica claramente os vários níveis envolvidos e suas atribuições: o “Modelo OSI” (Open Systems Interconnection Reference Model) Voltado para comunicação entre sistemas abertos Um sistema aberto é preparado para se comunicar com qualquer outro sistema aberto através de regras que ditam o formato, conteúdo e significado das mensagens enviadas e recebidas. Protocolos de Comunicação Modelos de protocolos Protocolos orientados à conexão Neste modelo, o emissor e o receptor de uma determinada mensagem devem estabelecer uma conexão antes que ocorra a troca de dados propriamente dita Existe possibilidade inclusive de negociação de aspectos do protocolo Protocolos sem conexão Conforme o nome já indica, não há necessidade de que o emissor e o receptor de uma determinada mensagem estejam conectados para a comunicação acontecer Protocolos de Comunicação O Modelo OSI Dividido em sete camadas de funcionalidade Cada camada trata de um aspecto da comunicação e provê uma interface (operações que definem os serviços da camada) às camadas adjacentes Cabeçalhos e finalizadores podem ser acrescentados e retirados às mensagens Características da Comunicação entre Processos Dependabilidade (qualidade do serviço oferecido por um dado sistema) – Em geral, sistema é considerado dependável (confiável) se há garantia de entrega de mensagens apesar da perda de um número “razoável” de pacotes Reconhecimento de mensagens – Reconhecimento positivo (esta é a mensagem esperada) – Reconhecimento negativo (esta não pode ser a mensagem esperada) Ordenação – Alguns sistemas dependem da ordem das mensagens – Fácil implementar para cliente-servidor ou p2p, porém complexo em comunicação multicast APIs de Comunicação APIs de comunicação permitem que as aplicações enviem e recebam dados Fornecem primitivas de comunicação que podem ser chamadas a partir do código Oferecem acesso aos serviços de comunicação, que podem assim ser usados pelas aplicações Exemplos de APIs de comunicação: – Sockets: Portas de comunicação locais ou de rede (Ex: SSL) – Suportes de RPC (Remote Procedure Call): Permitem chamar procedimentos/métodos remotamente (ex.: Java RMI, Sun RPC, ...) – Canais de eventos: Permitem notificar threads e processos dos eventos ocorridos no sistema (Ex.: JMS, CORBA Notification Service, …) Características da Comunicação entre Processos A passagem de mensagens entre processos pode ser suportada por duas operações (primitivas): SEND – Envio de uma sequencia de bytes para um destino RECEIVE – Recepção de uma sequencia de bytes enviada Características da Comunicação entre Processos Comunicação Síncrona e Assíncrona Uma fila é associada a cada destino de mensagem. Os processos remetentes adicionam mensagens a essa fila (remota) e os processos de destino removem as mensagens dessa fila (local). Comunicação síncrona Os processos remetente e destino são sincronizados a cada mensagem, ou seja, SEND e RECEIVE são BLOQUEANTES (causam bloqueio no processo até que a operação seja concluída): Operações SEND: O processo remetente é bloqueado até que o RECEIVE correspondente seja realizado. Operações RECEIVE: O processo destino é bloqueado até que a mensagem ser entregue. Características da Comunicação entre Processos Comunicação Síncrona e Assíncrona (continuação) Comunicação assíncrona As operações SEND são NÃO BLOQUEANTES, ou seja, o processo remetente pode prosseguir seu funcionamento assim que a mensagem tiver sido copiada para um buffer local para ser transmitida As operações RECEIVE podem ser BLOQUEANTES ou NÂO BLOQUEANTES Bloqueantes: o processo destino é bloqueado até que a mensagem ser entregue (como na comunicação síncrona). Não Bloqueantes: o processo destino prossegue sua execução após disparar o início da recepção da mensagem. A mensagem é armazenada em um buffer (isso acontece em background) para tratamento posterior e o processo é avisado quando a recepção estiver concluída. Características da Comunicação entre Processos Comunicação Síncrona e Assíncrona (continuação) A possibilidade do uso de threads dedicadas para a comunicação dentro de cada processo pode facilitar a adoção de RECEIVE bloqueante, pois o bloqueio será apenas das threads envolvidas na comunicação e não do processo inteiro. A comunicação não bloqueante pode ser mais vantajosa, mas é mais complexa de implementar. Por esse motivo muitos sistemas atuais não oferecem RECEIVE não bloqueante. Características da Comunicação entre Processos Destinos de Mensagens Protocolos internet identificam o destino das mensagens com o par [Endereço IP. Porta local]. Uma porta é o destino da mensagem dentro do computador e é identificada por um valor inteiro. Cada porta corresponde a um único destino (exceto quando se tratam de portas multicast), mas podem ter vários processos remetentes. Se cada endereço IP é associado a uma máquina, como garantir transparência de localização? Usar um serviço de nomes ou associação Usar identificadores de serviço independentes de localização e mapeá-los em um nível mais baixo para entregá-los às portas Características da Comunicação entre Processos Confiabilidade A confiabilidade de uma mensagem pode ser avaliada a partir da validade e integridade da mesma. Validade Um serviço de mensagens ponto a ponto pode ser dito confiável se houver garantia de que as mensagens fora entregues, independente de haver ocorrido alguma perda de pacotes. Se não há garantia de entrega, não há confiabilidade. Integridade As mensagens devem chegar não corrompidas e sem duplicação. Características da Comunicação entre Processos Ordenamento Algumas aplicações exigem que as mensagens sejam entregues na mesma ordem em que foram transmitidas pelo processo remetente. Nestes casos, mensagens entregues fora de ordem são consideradas falhas pela aplicação. É importante lembrar que entrega ordenada de mensagem não é uma característica obrigatória de aplicações distribuídas. Há aplicações cujo funcionamento não é afetado por isso. Comunicação em Grupo Um grupo é uma coleção de processos que atuam juntos em um sistema Para que o grupo funcione bem, é desejável garantir que qualquer mensagem enviada ao grupo seja conhecida por todos os seus membros Comunicação em Grupo Características de grupos de processos: Grupos são dinâmicos: Novos grupos podem ser criados e outros podem ser apagados Um processo pode se unir a um grupo ou deixar-lo Um processo pode pertencer a mais de um grupo É preciso haver algum tipo de estratégia de gestão de grupos A existência de um grupo precisa ser transparente Quando um processo envia uma mensagem para o grupo, ele não precisasaber o tamanho do grupo e nem a localização dos membros Comunicação em Grupo Estratégias de comunicação A comunicação em pares (um-para-um) não é o melhor modelo para comunicação de um processo com um grupo. O emprego da difusão seletiva (multicast) é a solução mais indicada A adoção de multicast permite a implementação de sistemas distribuídos que suportam as seguintes características: Tolerância a falhas baseado em serviços replicados Localização de serviços de descoberta na interligação de redes Melhor desempenho através da replicação de dados Propagação de notificações de eventos Comunicação em Grupo Técnicas de Implementação: Comunicação do grupo com outros processos externos Grupos abertos Neste tipo de grupo, qualquer processo externo pode enviar mensagem para o grupo todo É uma abordagem usada tipicamente em casos de replicação de serviços Grupos fechados Neste tipo de grupo, apenas os membros do grupo podem mandar mensagem para o grupo todo E como alguém de fora fala com o grupo? A mensagem é mandada para um único integrante do grupo, que se encarrega de repassar aos demais É uma abordagem usada tipicamente em processamento paralelo Comunicação em Grupo Técnicas de Implementação: Comunicação do grupo com outros processos externos Comunicação em Grupo Técnicas de Implementação: Estrutura interna do grupo: Grupos igualitários • Todos os processos são iguais e as decisões são tomadas coletivamente, por isso a tomada de decisão e mais complexa. • É um grupo simétrico, e isso evita a existência de um ponto único de falha, já que todos os processos são iguais e podem desempenhar as mesmas funções Grupos hierárquicos • Existe algum tipo de hierarquia entre os membros. Isso torna a tomada de decisão mais simples. • A organização mais simples (mas não a única possível) deste tipo de grupo consiste em um processo coordenador e outros processos denominados trabalhadores. Quando uma requisição é feita, o coordenador decide qual trabalhador é o mais apropriado para realizar a tarefa, ou define que todos devem realizar a tarefa • Possui um ponto único de falha (geralmente, o coordenador) Comunicação em Grupo Técnicas de Implementação: Controle de Membros: Usando um servidor de grupo • Todas as requisições devem ser feitas ao servidor • O servidor deve manter uma base de dados completa de todos os grupos e seu conjunto exato de membros • É eficiente, direto e fácil de implementar, mas o servidor torna-se uma vulnerabilidade da solução Adotando um controle distribuído • Cada novo membro deve enviar mensagem a todos os membros atuais anunciando a sua presença e, ao sair, deve avisar a todos os outros membros • É uma solução mais tolerante a falhas • Quando um membro falha ele deixa de pertencer ao grupo e não há mensagens de aviso • A entrada e a saída do grupo devem ser sincronizadas com a troca de mensagens Comunicação em Grupo Atomicidade Quando uma mensagem é enviada para o grupo, ela deverá chegar corretamente para todos os membros ou para nenhum deles Não são permitidas situações onde alguns membros recebem a mensagem e outros não (entrega parcial da mensagem) Isso torna a programação de aplicações mais fácil, pois quando um processo envia uma mensagem para o grupo não precisa se preocupar com o fato de alguém não ter recebido a mensagem Falhas na entrega são reportadas ao emissor da mensagem Sabendo-se que a mensagem falhou, é possível realizar as ações necessárias para recuperação da consistência do processamento Comunicação em Grupo Atomicidade A implementação da atomicidade não é simples A única forma de garantir a entrega da mensagem para todos os destinos é através do envio de mensagens de reconhecimento Tolerância a falhas É essencial que a atomicidade seja mantida mesmo na presença de falhas Exemplo de falha: O emissor envia uma mensagem para todos os membros do grupo e falha em seguida Um processo do grupo não recebe a mensagem Não há mais um emissor para ser avisado, logo, não existe possibilidade de retransmissão da mensagem O grupo deve ignorar a mensagem Comunicação em Grupo Ordenação Um mecanismo de comunicação em grupo precisa ter uma semântica bem definida com relação à ordem em que as mensagens serão entregues. A melhor garantia para isto é fazer com que as mensagens sejam entregues na mesma ordem em que foram enviadas Como nem sempre é possível imitar a ordem de envio, existem estratégias de ordenação que normalmente são implementadas nos mecanismos de comunicação que asseguram o funcionamento correto do grupo. Comunicação em Grupo Ordenação: Estratégias Sem Ordem • As mensagens são enviadas ao grupo sem a preocupação de ordenamento • Tem o menor overhead pois não necessita controle algum de sequência Ordenamento FIFO • Garante que todas as mensagens de um membro sejam entregues aos demais na ordem que o mesmo enviou • Não garante que todas as mensagens serão ordenadas, apenas ordena por membro Ordenamento CAUSAL • Adota o conceito de mensagem dependente de outra • Se uma mensagem “A” é dependente de outra mensagem “B”, então “A” deve sempre ser recebida depois de “B” Ordenamento TOTAL • Cada membro do grupo recebe TODAS as mensagens na mesma ordem Comunicação em Grupo Ordenação: O Problema do Ordenamento FIFO Atividades Complementares Leitura: COULOURIS, George. “Sistemas Distribuídos: Conceitos e Projeto”, Capítulos 2 e 4 Slide 1 Protocolos de Comunicação_clipboard0 Slide 3 Protocolos de Comunicação_clipboard1 Protocolos de Comunicação Slide 6 Slide 7 Características da Comunicação entre Processos Características da Comunicação entre Processos Características da Comunicação entre Processos Características da Comunicação entre Processos Características da Comunicação entre Processos Características da Comunicação entre Processos Características da Comunicação entre Processos Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Comunicação em Grupo Atividades Complementares
Compartilhar