Sincronização Capítulo 5 – Tanenbaum Capítulo 10,11,12 e 13 - Coulouris 1 Sumário Introdução Sincronização de Relógio Relógios Lógicos Estado Global Algoritmos Distribuídos Transações Distribuídas 2 Introdução Em um sistema centralizado a noção de tempo é não-ambígua Quando um processo quer saber do tempo, efetua uma chamada e o kernel responde Se um processo A pergunta o tempo e pouco depois o processo B faz o mesmo, certamente haverá diferença entre as respostas Em sistemas distribuídos esta tarefa não é trivial, pois não existe uma noção de relógio compartilhado globalmente Cada processo, em diferentes máquinas, possui sua própria idéia de tempo e dificilmente existe acordo sobre isso A comunicação entre processos em sistemas distribuídos está fortemente relacionada a forma como estes processos sincronizam Sincronização refere-se a “ fazer a coisa certa na hora certa” 3 Network 4 Sincronização de Relógio Durante o envio e recebimento de mensagens o tempo é levado em consideração Existem várias formas de sincronizar relógios em sistemas distribuídos, mas todos são essencialmente baseados em troca de informações de tempo Variações no atraso das comunicações e a forma como estas variações são tratadas, determinam a precisão dos algoritmos de sincronização de relógio Em muitos casos, conhecer o tempo absoluto não é necessário, o que conta é que os eventos relacionados a diferentes processos ocorram na ordem correta 5 Relógio Lógicos Relógio físico TAI – International Atomic Time UCT – Universal Coordination Time Para muitos propósitos , é suficiente que todas as máquinas concordem sobre o tempo Contudo, este acordo não precisa ser sobre o tempo absoluto mas sobre a ordem em que os eventos ocorrem (noção de relógio lógico) Quando um processo recebe uma mensagem, ele a coloca em uma fila local, ordenada de acordo com seu selo de tempo (timestamp) 6 Problemas de Inconsistência Cenário de atualização de débito e crédito em banco de dados replicados 7 Estado Global Em muitas situações, é útil conhecer o estado global de um sistema distribuído O estado global de um sistema distribuído consiste de: estado local de cada processo mensagens que estão atualmente em trânsito, ou seja, que foram enviadas mas ainda não foram entregues O que exatamente é o estado local de um processo depende no que estamos interessados No caso de banco de dados distribuídos, o estado pode consistir dos registros do banco de dados e excluir registros temporários usados para processamento Uma possível utilização do estado global é a detecção de deadlock (o estado local não evolui) 8 Coordenação de Processos Distribuídos Muitos algoritmos distribuídos de sincronização requerem a eleição de um processo coordenador Em geral, não interessa qual dos processos tomará para si esta responsabilidade Se todos os processos são exatamente iguais, com nenhuma característica que os diferencie, a escolha se baseia em critérios aleatórios Em geral, algoritmos de eleição de coordenador tentam localizar o processo de maior processID e designá-lo como coordenador A diferença entre algoritmos está na forma de localização e identificação do coordenador Existem vários algoritmos de eleição de coordenador, dentre eles: Algoritmo Bully Algoritmo Ring 9 Algoritmo Bully Proposto por Garcia-Molina (1982) Quando um processo qualquer (P) percebe que o coordenador não está respondendo a requisições, ele inicia uma eleição P envia mensagem ELECTION para todos os processos de processID maiores Se ninguém responder, P ganha a eleição Se alguém responder, a eleição acaba e P efetua sua tarefa 10 Algoritmo Ring Segue basicamente as mesmas orientações do algoritmo Bully Diferencia pela circulação da mensagem ELECTION em forma de anel Eventualmente, dois processo podem iniciar o processo de eleição no mesmo momento, ocasionando problemas Não usa passagem de token (diferente de outras abordagens) É assumido que os processos estão ordenados fisicamente ou logicamente Cada processo conhece seu sucessor Se o o sucessor está inoperante a mensagem é enviada ao próximo da cadeia Ganha eleição quem tiver o maior número e esteja ativo, obviamente 11 Exclusão Mútua em Sistemas Distribuídos Sistemas envolvendo múltiplos processos são mais facilmente programados através do uso de regiões críticas Quando um processo tem que ler ou alterar estrutura de dados compartilhada, primeiro entra na região crítica para obter exclusão mútua Em sistemas mono-processados, regiões críticas são protegidas por semáforos, monitores e construtores similares Em sistemas distribuídos tais mecanismos devem sofrer adaptações 12 Algoritmo centralizado Forma mais direta para obter exclusão mútua em sistemas distribuídos Simula o ambiente mono-processado Um processo é eleito coordenador Sempre que um processo quer entrar na região crítica, envia uma mensagem ao coordenador Se não existe outro processo na região crítica, o coordenador envia mensagem garantindo a permissão Apesar de simples de implementar, o coordenador é um ponto de falha Mensagens podem sofrer atrasos e perdas (request, grant, release 13 Algoritmo Centralizado P1 solicita entrar na região crítica e coordenador concede permissão P2 solicita o mesmo, mas fica aguardando com requisição em fila Quando P1 libera a região crítica, P2 obtém permissão 14 Algoritmo Distribuído Alternativa a um único ponto de falha (coordenador) em algoritmo centralizado Quando um processo deseja entrar na região crítica, envia mensagem para todos (inclusive para si mesmo) É assumida a comunicação confiável, através de ack Quando um processo recebe a mensagem (request) de outro processo, a ação depende do seu estado a respeito da região crítica identificada na mensagem Se o receptor não está na RC e não quer entrar, envia OK para emissor Se o receptor está na RC, não responde a mensagem e enfileira a requisição Se o receptor deseja entrar na RC, compara timestamp na mensagem com o tempo contido na mensagem que ele próprio enviou. O menor vence. Desvantagens: mais lento, mais complexo, mais caro 15 Transações Distribuídas Um conceito fortemente relacionado a exclusão mútua é o conceito de transação Transações têm em comum a proteção de um recurso compartilhado contra acesso simultâneo por processos concorrentes Em particular, transações permitem a um processo acessar e modificar múltiplos itens de dados como uma única ação atômica Se o processo falhar durante a transação, tudo é recuperado a um ponto antes do início da transação (abordagem tudo ou nada) Programação usando transações requer primitivas especiais que devem ser fornecidas pelo ambiente de suporte ou pela linguagem A lista de primitivas depende do tipo de objeto em uso na transação: Mail system: SEND, RECEIVE, FORWARD Sistema contábil: READ, WRITE 16 Transações Distribuídas BEGIN_TRANSACTION e END_TRANSACTION são delimitadores da transação As operações entre estes delimitadores formam o corpo da transação Todo o corpo da transação é completamente executado ou nenhuma operação será (all-or-nothing) Propriedades ACID das transações: Atomic: para o exterior a transação é indivisível Consistent: a transação não viola invariantes do sistema Isolated: transações concorrentes não interferem entre si Durable: uma vez que a transação conclui, as alterações são permanentes 17 Classificação de Transações 1. Flat Transaction: 2. Série de operações que satisfazem as propriedades ACID Nested Transaction: Transação construída a partir de um determinado número de transações (que podem rodar em paralelo) 3. Importante para sistemas distribuídos Distributed Transaction: Difere sutilmente de Nested Transactions 18 Comparação entre Transações Nested Transaction: divisão lógica em uma hierarquia de sub-transações Distributed Transaction: transações indivisíveis que operam sobre dados distribuídos 19 Controle de Transações Obter atomicidade na presença de falhas é um importante aspecto a considerar (a ser tratado posteriormente) As propriedades consistent e isolation são basicamente manipuladas por controle de concorrência através de: Data manager, Scheduler e Transaction manager 20