Chapter 3
Chapter 3
Chapter 3
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Sistemas Distribuídos<br />
Relógios Lógicos<br />
Relógios de Lamport<br />
Relógios Vectoriais<br />
Sérgio Duarte<br />
Sistemas Distribuídos<br />
Case study<br />
Como se implementar um Chat Room?<br />
‣ Requisitos:<br />
‣ N participantes<br />
‣ As mensagens não se perdem...<br />
‣ Ordenação????<br />
‣ Objectivo: minimizar a dúvida/ambiguidade...<br />
Sérgio Duarte<br />
Mestrado em Engenharia Informática<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
(c) 2011 - DI / FCT / UNL
Eventos<br />
Sistemas Distribuídos<br />
Sérgio Duarte<br />
Mestrado em Engenharia Informática<br />
Entendem-se como eventos as acções individuais conduzidas por<br />
um processo à medida que executa...<br />
‣ acções de comunicação<br />
‣ transformações de estado<br />
A sequência de eventos ocorridos num processo denota a sua<br />
história...<br />
Eventos<br />
Sistemas Distribuídos<br />
Sérgio Duarte<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
Registar a história de um processo consiste, então, em enumerar<br />
(ordenadamente) os eventos que nele ocorrem...<br />
‣ preservando a relação (temporal/causal) entre os eventos...<br />
Num processo isolado pi, com um único processador, existe<br />
sempre uma ordenação total única (→i) entre eventos:<br />
‣ e →i e’, se e só se e ocorre antes de e’, em pi<br />
‣ história(pi) = hi = < ei 0 , ei 1 , ei 2 , ... ><br />
(c) 2011 - DI / FCT / UNL
Sistemas Distribuídos<br />
Tempo: Eventos e Relógios<br />
Sérgio Duarte<br />
Mestrado em Engenharia Informática<br />
Pode-se usar o valor do relógio para registar quando um evento<br />
ocorreu.<br />
‣ Ao valor do relógio que fica associado ao evento chama-se estampilha<br />
temporal<br />
‣ A relação →i pode então ser ser capturada e reproduzível de uma forma<br />
concreta através destas estampilhas<br />
Será possível estender a ideia para um sistema distribuído?<br />
‣ Sim, parcialmente, mas necessitamos de sincronizar os relógios...<br />
Sistemas Distribuídos<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
Estampilhas: Relógios Sincronizados<br />
t=3<br />
t=4<br />
t=5<br />
m0<br />
Relógios sincronizados<br />
m2<br />
t=7<br />
m3<br />
Sérgio Duarte<br />
m1<br />
É possível constatar que m0<br />
deve ser anterior a m1 e m3<br />
porque a estampilha temporal<br />
da sua emissão é inferior<br />
(c) 2011 - DI / FCT / UNL
Sistemas Distribuídos<br />
Mestrado em Engenharia Informática<br />
Estampilhas : Relógios Não Sincronizados<br />
t=3<br />
t=4<br />
t=5<br />
Relógios não sincronizados<br />
m0<br />
m2<br />
t=3<br />
m3<br />
Sérgio Duarte<br />
m1<br />
Sistemas Distribuídos<br />
Estampilhas : Limitações<br />
pi<br />
pj<br />
ti = tUTC + d<br />
Sérgio Duarte<br />
d<br />
tUTC<br />
tprop<br />
d<br />
Qual o evento que ocorreu antes?<br />
‣ O envio de m1 ou m3?<br />
O envio de m0 ou m3?<br />
O envio de m0 ou m1?<br />
tj = tUTC - d<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
As estampilhas temporais ordenam eventos correctamente desde que o<br />
tempo de propagação das mensagens seja duas vezes superior ao desvio dos<br />
relógios físicos em causa.<br />
Alternativamente, os eventos a ter que ser espaçados no tempo em pelo<br />
menos duas vezes o desvio máximo dos relógios...<br />
(c) 2011 - DI / FCT / UNL<br />
tempo físico
Sistemas Distribuídos<br />
Relógios Físicos : Alternativas...<br />
Sérgio Duarte<br />
Mestrado em Engenharia Informática<br />
Não sendo possível sincronizar os relógios físicos de um sistema<br />
distribuído perfeitamente como fazer para ordenar eventos de<br />
forma coerente em todo o sistema?<br />
‣ dar menos importância à qualidade física do tempo<br />
‣ centrar o problema na questão da causalidade dos eventos<br />
Sistemas Distribuídos<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
Relação “Happened Before” (Lamport 1978)<br />
A relação aconteceu antes * (→) é uma ordem parcial que<br />
pretende respeitar a causalidade física entre os eventos de um<br />
sistema distribuído.<br />
Definição:<br />
HB1: se ∃ pi : ea →i eb então ea → eb<br />
HB2: esend(m) → ereceive(m), para qualquer mensagem m<br />
HB3: se ea → eb e eb → ec, então ea → ec (transitividade)<br />
Se ¬ ea → eb ∧ ¬ eb → ea então ea e eb dizem-se concorrentes ( ea || eb )<br />
* Happened Before<br />
Sérgio Duarte<br />
(c) 2011 - DI / FCT / UNL
Sistemas Distribuídos<br />
Mestrado em Engenharia Informática<br />
Relação “Happened Before” : Exemplo<br />
a c<br />
b<br />
a → c → f<br />
d → e<br />
b → g<br />
c → d<br />
e → g<br />
a → c → d → e → g<br />
Sérgio Duarte<br />
Sistemas Distribuídos<br />
d e<br />
a || b<br />
c || b<br />
d || b<br />
...<br />
f<br />
g<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
Relação “Happened Before” : Considerações<br />
A relação aconteceu antes apenas regista relações de causalidade<br />
que derivam exclusivamente das mensagens enviadas no próprio<br />
sistema.<br />
A relação aconteceu antes estabelece potenciais relações de<br />
causalidade entre eventos.<br />
‣ Se ea → eb, então ea poderá ter causado eb, ou não.<br />
Os relógios lógicos são a mecanismo inventado por Lamport<br />
para capturar numericamente a relação aconteceu antes<br />
Sérgio Duarte<br />
(c) 2011 - DI / FCT / UNL
Sistemas Distribuídos<br />
Relógios Lógicos (Lamport 1978)<br />
Sérgio Duarte<br />
Mestrado em Engenharia Informática<br />
Um relógio lógico (de Lamport) é um contador monótono crescente<br />
usado para atribuir uma estampilha temporal a um evento.<br />
Cada processo pi, mantém um relógio lógico Li actualizado da seguinte forma:<br />
‣ LC1 :<br />
‣ Se e é um evento executado em pi, faz-se:<br />
‣ LC2 :<br />
Li := Li + 1 [ alternativamente, Li := Li + x , x > 0 ]<br />
C(e) := Li, com C(e) a estampilha temporal atribuída ao evento e<br />
‣ Se e = esend(m), usa-se a regra anterior e envia-se (m,t), com t =C(send(m))<br />
‣ Se e = ereceive(m,t), faz-se Li=max(Li, t) e, de seguida, aplica-se a regra LC1<br />
Sistemas Distribuídos<br />
Relógios Lógicos : Exemplo<br />
1 2 3<br />
a c<br />
1<br />
b<br />
Sérgio Duarte<br />
3 4<br />
d e<br />
f<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
5<br />
g<br />
(c) 2011 - DI / FCT / UNL
Sistemas Distribuídos<br />
Mestrado em Engenharia Informática<br />
Relógios Lógicos : Ordenação Total<br />
Por vezes, é interessante ordenar totalmente os eventos que<br />
ocorrem num sistema distribuído<br />
Tal é possível juntando às estampilhas de Lamport um qualquer<br />
identificador extra que torne os seus valores globalmente únicos<br />
‣ O identificador do processo (guid), por exemplo.<br />
‣ Dado um evento e, executado no processo pi ( i = 1, 2, 3, ..n) com<br />
estampilha temporal Le, a estampilha temporal global é:<br />
(Le, i).<br />
‣ A ordem global das estampilhas temporais é definida por:<br />
(La, i) < (Le2, j), sse La < Lb ∨ La = Lb e i < j<br />
Sérgio Duarte<br />
Sistemas Distribuídos<br />
Relógios Lógicos<br />
Sérgio Duarte<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
Dados dois eventos, ea e eb, tem-se ea → eb C(ea) < C(eb)<br />
‣ Pode-se demonstrar por indução no comprimento da sequência de<br />
eventos que estabelecem ea → eb<br />
O inverso não é necessariamente verdadeiro!<br />
‣ C(ea) < C(eb) ea → eb<br />
1 2 3<br />
a c<br />
1<br />
b<br />
C(b) < C(f) ∧ ¬(b → f)<br />
3 4<br />
d e<br />
(c) 2011 - DI / FCT / UNL<br />
f<br />
5<br />
g
Sistemas Distribuídos<br />
Relógios Lógicos: Limitações<br />
Sérgio Duarte<br />
Mestrado em Engenharia Informática<br />
Os relógios lógicos não permitem decidir se dois eventos são<br />
concorrentes...<br />
Sistemas Distribuídos<br />
Relógios Lógicos: Limitações<br />
Sérgio Duarte<br />
(c) 2011 - DI / FCT / UNL<br />
Mestrado em Engenharia Informática<br />
Os relógios lógicos não permitem decidir se dois eventos são<br />
concorrentes...<br />
Esta limitação pode ser resolvida usando relógios vectoriais<br />
(c) 2011 - DI / FCT / UNL