SISTEMAS DISTRIBUÍDOS Capítulo 7 - Tempo e ordenação de eventos Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 1
NOTA PRÉVIA A estrutura da apresentação é semelhante e utiliza algumas das figuras do livro de base do curso: G. Coulouris, J. Dollimore, T. Kindberg, G. Blair Distributed Systems - Concepts and Design, Addison-Wesley, 5th Edition, 2011 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 2
MOTIVAÇÃO Num sistema distribuído é impossível sincronizar os relógios de vários computadores a menos dum dado valor. Porquê? Assim, é impossível usar o valor do relógio em diferentes computadores para saber a ordem dos eventos. E.g.: erro: 0:05 Como ordenar os dois eventos? E de acordo com os relógios? 12:05 12:06 12:07 12:00 12:03 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 3
COMO SE DEFINE ACONTECEU ANTES? Num sistema distribuído, estamos em geral interessados em conhecer as relações de causalidade, i.e., saber quais os eventos que podem ter causado outros eventos. Por exemplo: Rede social Permissões iniciais: amigos podem ver toda a informação. Para adicionar fotografia que não se pretenda que amigo X veja: 1. Remover X da lista de amigos; 2. Adicionar fotografia. Relação de causalidade importante porque quem veja a fotografia deverá ver também X removido da lista de amigos. Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 4
COMO SE DEFINE ACONTECEU ANTES? Num sistema distribuído, estamos em geral interessados em conhecer as relações de causalidade, i.e., saber quais os eventos que podem ter causado outros eventos. A relação aconteceu antes capta esta propriedade: o evento e 1 aconteceu antes de e 2 se e 1 pode ter causado e 2. a1 a2 a3 m 1 a4 b1 b2 b3 m 2 c1 c2 c3 c4 c5 c6 c7 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 5
COMO SE DEFINE ACONTECEU ANTES? Num dado processo, a relação aconteceu antes pode-se definir pela ordem local de execução dos eventos local: a1 a2 a3 a4 b1 b2 b3 c1 c2 c3 c4 c5 c6 c7 a1 a2 a3 m 1 a4 b1 b2 b3 m 2 c1 c2 c3 c4 c5 c6 c7 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 6
COMO SE DEFINE ACONTECEU ANTES? (CONT.) Quando um processo envia uma mensagem a outro processo, o envio acontece necessariamente antes da recepção: a3 b2 b3 c7 a1 a2 a3 m 1 a4 b1 b2 b3 m 2 c1 c2 c3 c4 c5 c6 c7 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 7
COMO SE DEFINE ACONTECEU ANTES? (CONT.) A relação aconteceu antes é transitiva: x1 x2 e x2 x3 => x1 x3 Dois eventos e1, e2 dizem-se concorrentes (e1 e2) se e1 e2 e e2 e1. a1 b1, a1 c1, a1 c2,... a1 a2 a3 m 1 a4 b1 b2 b3 m 2 c1 c2 c3 c4 c5 c6 c7 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 8
DEFINIÇÃO: RELAÇÃO ACONTECEU ANTES (LAMPORT 1978) A relação aconteceu antes ou precede ( ) é definida por: e1 e2, se e1 e e2 ocorreram no mesmo processo e e1 ocorreu antes de e2 e1 e2, se e1 e e2 são, respectivamente, os eventos de enviar e receber a mensagem m e1 e2, se e3: e1 e3 e e3 e2 (relação transitiva) Dois eventos e1, e2 dizem-se concorrentes (e1 e2) se e1 e2 e e2 e1. Nota: objetivo é criar relação similar à causalidade física: Se o evento e 1 pode ser a causa do evento e 2, então e 1 aconteceu antes de e 2. Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 9
OBJETIVO Desenvolver mecanismo que substitua relógios físicos e permita: 1. Dados dois eventos, e 1 e e 2, e 1 e 2 C(e 1 ) < C(e 2 ) Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 10
RELÓGIOS LÓGICOS: PRIMEIRA TENTATIVA Em cada processo, podemos usar um contador, L i, para etiquetar os eventos [ T(e i )=L i ; L i = L i + 1 ] Problema? Como se pode resolver? 1 2 3 m 1 4 1 2 3 m 2 1 2 3 4 5 6 7 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 11
RELÓGIOS LÓGICOS: SEGUNDA TENTATIVA Em cada processo, podemos usar um contador, L i, para etiquetar os eventos [ T(e i )=L i ; L i = L i + 1 ] Ao enviar uma mensagem, envia-se o valor do contador local Ao receber uma mensagem, antes de etiquetar a recepção, atualiza-se o relógio local para o máximo do valor recebido e do relógio local [ L i =max(l i,t(msg)) ] 1 2 3 m 1 4 1 4 5 m 2 1 2 3 4 5 6 7 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 12
DEFINIÇÃO: RELÓGIOS LÓGICOS (LAMPORT 1978) Um relógio lógico (de Lamport) é um contador monotonicamente crescente, usado para atribuir uma estampilha temporal a um evento. Cada processo i, mantém um relógio lógico L i que atualiza da seguinte forma: 1) Seja e um evento executado no processo i, faz-se: L i := L i + X (X > 0) T(e):=L i, com T(e) a estampilha temporal atribuída ao evento e. 2) Se e=send(m), aplica-se a regra anterior e envia-se (m,t), com t=t(send(m)) 3) Se e=receive(m,t), faz-se L i =max(l i,t) e, de seguida, aplica-se a regra base 1) Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 13
RELÓGIOS LÓGICOS: PROPRIEDADES 1. Dados dois eventos, e 1 e e 2, e 1 e 2 C(e 1 ) < C(e 2 ) 2. Dados dois eventos, e 1 e e 2, C(e 1 ) < C(e 2 ) e 1 e 2? Exemplo? 1 2 3 m 1 4 1 4 5 m 2 1 2 3 4 5 6 7 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 14
RELÓGIOS LÓGICOS + ORDEM TOTAL Por vezes é importante estabelecer uma ordem total entre os eventos. Apenas os relógios lógicos não o permitem. Porquê? 1 2 3 m 1 4 1 4 5 m 2 1 2 3 4 5 6 7 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 15
RELÓGIOS LÓGICOS + ORDEM TOTAL Podemos obter uma ordem adicionado ao relógio o identificador do processo, T(e i )=(L i,p i ) (l i,p i ) < (l j,p j ) l i < l j (l i = l j p i < p j ) (1,p 1 ) (2,p 1 ) (3,p 1 ) (4,p 1 ) (1,p 2 ) (4,p 2 ) (5,p 2 ) (1,p 3 ) (2,p 3 ) (3,p 3 ) (4,p 3 ) (5,p 3 ) (6,p 3 ) (7,p 3 ) Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 16
OBJETIVO Desenvolver mecanismo que substitua relógios físicos e permita: 1. Dados dois eventos, e 1 e e 2, e 1 e 2 C(e 1 ) < C(e 2 ) 2. Dados dois eventos, e 1 e e 2, C(e 1 ) < C(e 2 ) e 1 e 2 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 17
HISTÓRIA CAUSAL Se se quer saber o que aconteceu antes, porque não manter para cada evento o conjunto de eventos que ocorreram antes desse evento? {a 1 } {a 1,a 2 } {a 1,a 2,a 3 } {a 1,a 2,a 3,a 4 } {b 1 } {c 1 } {a 1,a 2,a 3, b 1, b 2 }............... {a 1,a 2,a 3, b 1, b 2, b 3 } {a 1,a 2,a 3, b 1, b 2, b 3, c 1,..., c 7 } Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 18
HISTÓRIA CAUSAL A história causal dum evento, H(e), é um conjunto que inclui o próprio evento e os evento que aconteceram antes. Cada evento, e, é etiquetado com um identificador, E(e); a história causal desse evento é a reunião desse evento com os eventos anteriores (uma mensagem propaga a história no momento da emissão). {a 1 } {a 1,a 2 } {a 1,a 2,a 3 } {a 1,a 2,a 3,a 4 } {b 1 } {c 1 } {a 1,a 2,a 3, b 1, b 2 }............... {a 1,a 2,a 3, b 1, b 2, b 3 } {a 1,a 2,a 3, b 1, b 2, b 3, c 1,..., c 7 } Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 19
HISTÓRIA CAUSAL Como comparar duas histórias causais? H(e 1 ) < H(e 2 ) ó H(e 1 ) H(e 2 ) H(e 1 ) H(e 2 ) {a 1 } {a 1,a 2 } {a 1,a 2,a 3 } {a 1,a 2,a 3,a 4 } {b 1 } {c 1 } {a 1,a 2,a 3, b 1, b 2 }............... {a 1,a 2,a 3, b 1, b 2, b 3 } {a 1,a 2,a 3, b 1, b 2, b 3, c 1,..., c 7 } Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 20
RELÓGIO VETORIAL Um relógio vetorial, V(e), não é mais do que uma forma eficiente de representar uma história causal, mantendo um vetor que em cada posição tem o contador do último evento dum processo (todos os eventos anteriores desse processo são necessariamente conhecidos). [a b c] [1 0 0] [2 0 0] [3 0 0] [4 0 0] {a 1 } {a 1,a 2 } {a 1,a 2,a 3 } {a 1,a 2,a 3,a 4 } {b 1 } {a 1,a 2,a 3, {a 1,a 2,a 3, [0 1 0] [3 2 0] b 1, b 2 } b 1, b 2, b 3 } [3 3 0] {c............... {a 1,a 2,a 3, 1 } [0 0 1] b 1, b 2, b 3, [3 3 7] c 1,..., c 7 } Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 21
DEFINIÇÃO: RELÓGIO VETORIAL Um relógio vetorial num sistema com n processos é um vetor de n inteiros, V[1..n]. Cada processo i mantém um relógio vectorial V i que usa para atribuir uma estampilha temporal aos eventos locais e atualiza-a da seguinte forma: Inicialmente, V i [j]=0, i,j Antes de etiquetar um evento e no processo i, faz-se: Vi[i] := Vi[i]+1. C(e)=Vi Se e=send(m), aplica-se a regra anterior e envia-se (m,t), com t=c(send(m)) Se e=receive(m,t) no processo i, faz-se Vi[j]=max(Vi[j],t[j]), j e, de seguida, aplica-se a regra base Dados dois relógios vectoriais V1 e V2, tem-se: V1=V2, sse V1[i]=V2[i], i V1 V2, sse V1[i] V2[i], i V1<V2, sse V1 V2 V1 V2 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 22
PARA SABER MAIS G. Coulouris, J. Dollimore and T. Kindberg, Distributed Systems Concepts and Design, Addison-Wesley, 5th Edition, 2011 Secção 14.2, 14.4 Material de suporte às aulas de Sistemas Distribuídos Copyright DI FCT/ UNL / 23