Académique Documents
Professionnel Documents
Culture Documents
Roteiro:
• Modelo de Sistema
• O problema do Consenso
• Sistemas Síncronos e o Acordo Bizantino
• Consenso em Sistemas Assíncronos
• Detectores de Falha e o Algoritmo de Chandra & Toueg
• Consistência Interativa e relação entre os problemas
Referências:
Livro:
Li Coulouris,
C l i SeçãoS ã 11.5
11 5
Livro: Pankaj Jalote: Fault Tolerance in Distributed Systems, seção 3.1
Livro: Chow, Johnson, Cap. 11
D. Dolev, C. Dwork, L. Stockmayer: On the minimal synchronization
needed for Distributed Consensus, Journal of the ACM, 35(2), 1997.
T.D. Chandra, S.Toueg: Unreliable failure detectors for reliable
distributed systems, Journal of the ACM, 43(2), 1996.
© Markus Endler
O Consenso Distribuído
O Consenso é um problema fundamental em Sistemas
Distribuídos p
pois é:
1
Modelo do Sistema
Sistema:
• conjunto de processos Pi (i= 1,2,..,N)
• comunicação (por envio de mensagem) é confiável
• processos podem apresentar falhas
Tipos:
-falha de parada (crash)
-falta arbitrária (bizantina)
• até f processos podem falhar simultaneamente
O Problema de Consenso
Definição do problema:
Existem N processos, dos quais f processos
apresentam
t falhas.
f lh
cada processo Pi propõe um único valor vi ∈ D
todos os processos interagem para a troca de valores
entre sí
em algum momento, os processos entram no estado
“decided” em que atribuem um valor para a variável
de decisão di (que não é mais alterada)
© Markus Endler
2
Exemplo
d1=OK d2=OK
P1 P2
v1=OK v2=OK
Algorítmo de Consenso
v2=NOK
P3
Principais Requisitos
Terminação:
Em algum momento, cada processo correto atinge o
estado “decided” e atribui um valor à variavel de decisão
di
Acordo:
todos os processos corretos atribuemo mesmo valor para
a variável de decisão
Integridade
se todos os processos corretos propuseram o mesmo
valor vi =v, então qq processo correto em “decided”
também terá decidido di =v
Integridade (alternativa mais fraca – depende da aplicação)
o valor de di (i=1,2,..,N) deve ser necessariamente igual ao
valor proposto por um Pi correto
© Markus Endler
3
Um Algoritmo simples
Assuma um Grupo de processos corretos não faltosos.
Cada processo Pi :
usa multicast confiável para mandar o valor vi para os
demais
espera até receber N-1 mensagens
Define o valor de di usando uma função deterministica:
maioria(v1,v2,..,vN), ou ⊥ se não houver maioria,
máximo (v1,v2,..,vN) ou mínimo(v1,v2,..,vN)
média (v1,v2,..,vN)
...
ÎTerminação é garantida pelo multicast confiável.
Î Acordo e integridade garantidos pelo uso da mesma
função (determinística) e do multicast confiável
Mas e se processos podem falhar (crash ou bizantinos)?
© Markus Endler
4
Consenso em sistemas síncronos
[Dolev & Strong83] propuseram um algoritmo para o consenso entre N
processos que tolera até k falhas tipo “crash” em um sistema
síncrono.
ç
Observações:
• processos usam multicast não-confiável, mas sabe-se que a duração
máxima de cada difusão é ∆.
• a variável Valuesj contém o conjunto de valores obtidos na rodada j
• Os timers tem identificadores (que identificam a rodada corrente)
© Markus Endler
5
Consenso em sistemas síncronos
Corretude do Algoritmo de Dolev&Strong:
Terminação: obvio, pois algoritmo termina após ∆*(k+1)
Acordo e Integridade: decorrem do uso da função min e se for mostrado
que ao terminar, todos os processos têm conjuntos Valuesk+1
idênticos
© Markus Endler
6
Acordo Bizantino
“Problema dos Generais Bizantinos – PGB”
O PGB foi inicialmente proposto por L.Lamport (82) e equivale ao
problema de consenso em um sistema com falhas arbitrárias.
Motivação:
N generais (dentre eles, 1 comandante) devem concordar sobre
esperar ou atacar uma cidade sitiada, que só conseguem
conquistar se todos os batalhões atacarem conjuntamente.
O comandante dá a ordem (atacar/esperar), e os generais devem
ter certeza que receberam o mesmo.
Alguns dos generais (ou o comandante) são traidores e tentam
atrapalhar o consenso, divulgando para uns que receberam a
ordem de atacar,, e p
para outros a ordem de esperar.
p
© Markus Endler
7
O Problema do Acordo Bizantino
Impossibilidade de solução para N=3 e f=1 [Lamport,Pease,Shostak82]:
Dois possíveis casos:
Comandante (iniciador) é traidor
U generall é ttraidor
Um id
Obs: mensagem “3:2:a” significa “P3 diz que P2 diz que comando é a(ttack)”
mensagem “3:2:w” significa “P3 diz que P2 diz que comando é w(ait)”
C C
1:a 1:a 1:a 1:w
2:1:a 2:1:a
p2 p3 p2 3:1:w
p3
3:1:w
8
O Problema do Acordo Bizantino
Pease,Shostak,Lamport mostraram que o problema de
impossibilidade do PGB para qualquer N ≤ 3*f é redutível
ao problema N=3 e f=1f=1.
Idéia:
Faça 3 processos P1,P2 e P3 simularem o comportamento
de n1, n2, n3 generais, respectivamente, tal que:
n1+n2+n3 = N
n1, n2, n3 ≤ N/3 + 1
P
Processos corretos
t simulam
i l o comportamento
t t de
d
generais corretos
Um dos processos só simula generais traidores (possível,
pois como no máximo f generais são traidores, N ≤ 3*f e
n1, n2, n3 ≤ N/3 +1 )
© Markus Endler
Exemplo
F C
F F C C
F C
P1 P2
C
C C
P3
N=11 e f=4
© Markus Endler
9
O Problema do Acordo Bizantino
© Markus Endler
1a rodada:
C C
1:a 1:a 1:a 1:u 1:a 1:w
2:1:a 2:1:u
p2 3:1:u
p3 p2 3:1:w
p3
4:1:a 4:1:a 4:1:a 4:1:a
2:1:a 3:1:w 2:1:u 3:1:w
p4 p4
(A) General traidor (B) Comandante traidor
© Markus Endler
10
O Problema do Acordo Bizantino
Msgs do p3 C
3:1:u
traidor: 1:u 1:w
3:1:w 1:a
2a rodada:
2:4:1:a
p3 p2 p3
p2 3:4:1:a
4:3:1:w
4:3:1:w 4:2:1:u 3:2:1:u
2:3:1:u 2:3:1:w
Î P3 é traidor! Î C é traidor!
pp4 pp4
(A) General traidor (B) Comandante traidor
© Markus Endler
11
O Problema do Acordo Bizantino
O Algorítmo Geral funciona em f+1 rodadas:
1. Comandante C manda comando para todos
2. Em cada rodada, um general P difunde os valores recebidos de Q
para todos demais, exceto C e Q
3. Todos os generais executam maioria sobre todas as msgs recebidas
Obs: Se um processo deixar de enviar em uma rodada, considera-se que
enviou ⊥
Consenso: Impossibilidade em
Sistemas Assíncronos
[Fischer,Lynch,Peterson85] mostraram que o consenso
em um sistema assíncrono (com a possibilidade de
um único processo falho tipo “fail-stop”) não tem
solução, isto é, não existe algoritmo que garanta o
consenso em qualquer processamento.
Principal Razão:
Consenso com falha (crash, arbitrária) requer que
cada processo receba um conjunto completo de
valores de todos os demais processos corretos Î só
assim consegue
g criar uma base idêntica de valores
para a tomada de decisão comum.
Devido a inexistência de um limite superior para o
tempo de comunicação, não é possível distinguir uma
falha de processo (fail-stop), de uma mensagem
muito demorada (falha de temporização)
© Markus Endler
12
Consenso: Impossibilidade em
Sistemas Assíncronos
A idéia da prova da impossibilidade:
Assume-se a existência de um adversário “muito
esperto”
p q
que seria capaz
p de p perpetuar
p
indefinidamente a execução do protocolo através de:
Atraso imprevisível de mensagens em determinados
momentos
Aceleração ou retardo da velocidade de um processo
de forma que este permaneça sempre fora de
sincronia com a atividade dos demais processos
Mesmo q que seja
j muito improvável
p q
que exista uma rede
(ou usuário) que seja capaz de interferir no
consenso de forma tão metódica e ágil Î o consenso
não pode ser garantido...
... mesmo que (na maioria dos casos) o consenso possa
ser alcançado.
© Markus Endler
13
Outros Modelos
O modelo síncrono é muito restrito (e.g. muito “otimista”),
o modelo assíncrono é muito geral (“pessimista”)
Isto levou pesquisadores a definirem modelos
intermediários entre os dois, e que não estão sujeitos
ao teorema da impossibilidade de FLP, por fazerem
hipóteses sobre as falhas de temporização (delays
arbitrários na execução ou comunicação).
São eles:
Modelo de sincronia parcial (partially synchronous
model)
Modelo de assincronia temporal (timed asynch. model)
Modelo assíncrono com detectores de falha(*)
(*) um detector de falhas pode suspeitar da falha de um processo,
e pode errar se esse estiver correto
© Markus Endler
Outros Modelos
© Markus Endler
14
Detectores de Falha
Um Detector de Falha (DF) é um serviço que pode ser consultado
para informar sobre o estado de qualquer processo P.
Retorna um de dois possíveis valores:
DF(P) = { Suspected(P), Unsuspected(P)}, onde:
Suspected(P) :: há indícios de que P esteja falho (“crashed”)
Unsuspected(P):: há indícios de que P esteja correto (ativo)
Appl. P alive?
heartbeat
DF DF
© Markus Endler
15
Detectores de Falha: Implementação
Em sistemas assíncronos, não há nenhuma garantia de que
mensagens serão transmitidas em D unidades de tempo.
Se T for pequeno demais:
Aumenta a probabilidade de suspeitas falsas
Aumenta o tráfego na rede
Se T for grande demais:
Processos falhos podem demorar para serem
descobertos
Falhas transientes podem permanecer desapercebidas
Na prática,
prática usa
usa-se
se um ajuste dinâmico do timeout:
p.ex. Se heartbeat chega após T+D(mas antes de
T+2D) ajusta-se proximo timeout para T+2D, até um
certo limite, de T+ n*D.
Obs: Em sistemas síncronos, os DF são sempre confiáveis:
usa-se D = tempo máximo de transmissão de msgs
© Markus Endler
A idéia central:
Desconsiderar as mensagens de um membro do
grupo suspeito de ter falhado (“fail-silent”).
Desvantagem: se DF é impreciso, então pode-se ter
suspeitas falsas, e possivelmente reduz-se
desnecessariamente o número de processos
Î Usando um DF embute-se todo tratamento temporal
no DF e simula-se um sistema síncrono.
16
Detectores de Falha & Consenso
[Chandra,Hadzilacos,Toueg96] desenvolveram um
algoritmo para consenso em sist. assíncronos que
usa um DF não-confiável e que permite que
processos suspeitos (erroneamente) continuem
participando do grupo, e:
mostraram que o consenso em um sist. assíncrono
pode ser atingido com estes DF, contanto que f < N/2
e que a comunicação seja confiável
e definiram 8 classes de DF, segundo as
propriedades de Completude e Precisão.
Referências:
[Chandra,Toueg,94]. Chandra, Toueg: Unreliable Failure Detectors for Reliable
Distributed Systems (1994), Journal of the ACM, 1994.
[Chandra,Hadzilacos,Toueg,96] The weakest failure detector for solving
Consensus, (1996), http://citeseer.ist.psu.edu/chandra96weakest.html
© Markus Endler
© Markus Endler
17
Detectores de Falha & Consenso
Strong Weak Eventual Eventual Weak
Accuracy Accuracy Strong Accuracy
Acc.
Strong Perfect Strong S ാP ാS
p
completeness P
Weak Q Weak W ാQ ാW
Completeness
O Algorítmo de Chandra&Toueg
Em vez de ാW, vamos mostrar o algoritmo que
funciona para um FD um pouco mais forte, o ാS
(Eventual-weak Accuracy & Strong Completeness)
© Markus Endler
18
O Algorítmo de Chandra&Toueg
Princípio (para cada consenso):
Executa um número indefinido de rodadas assíncronas r,
onde em cada rodada um dos N processos faz o papel de
coordenador (usa Paradigma do Coordenador Rotativo)
Todos os processos sabem qual processo será o
coordenador na rodada r. Exemplo: c = (r mod N) +1
Em vez de executar uma função comum f(v1,v2,..,vN), o
coordenador da rodada corrente sugere como valor de
decisão d um dos vis recebidos (estimativa g) e difunde-os
para os demais,
Cada Pi que recebe valor do coordenador “muda
muda de
opinião”, re-setando o seu valor proposto vi ← g e envia
uma confirmação.
O coordenador tenta coletar (n+1)/2 confirmações, e se
conseguir, congela g como novo valor de decisão e
difunde de forma confiável o g como resultado do
consenso para todos.
© Markus Endler
O Algorítmo de Chandra&Toueg
Cada consenso consiste de 4 etapas (que podem demorar
várias rodadas):
1) Cada processo Pi envia o seu vi com o seu número de
rodada atual para o “coordenador
coordenador da vez”
vez C
2) C recolhe (n+1)/2 mensagens, escolhe o valor g com
o maior time-stamp, e difunde este valor para todos Pi
i∈[1,N]
3) Em cada Pi pode acontecer:
1) Recebe g de C ⇒ adota g como seu valor e retorna
ack para C
2) Seu DF notifica: Suspected(C) ⇒ envia um NACK
para C
4) Se C receber (n+1)/2 ACKS, faz multicast confiável(1)
para todos indicando o valor escolhido
19
Troca de mensagens em rodada r
O Algorítmo de Chandra&Toueg
Procedure propose(vi)
g = vi; // estimativa incial
decided = false;
r = 0; TS = 0;
while (¬ decided) {
r++;;
C = (r mod N) +1;
1: send(C, r, g, TS); // cada processo envia sua estimativa
2: if (C == myself) { // coordenador escolhe um valor com max time-stamp
espere por (n+1)/2 mensagens (q, r, e, ts) e armazene em msg[r]
T = max( { ts | (q, r, e, ts) ∈ msg[r]})
g = { e | ts == T ∧ (q, r, e, ts) ∈ msg[r] }
mcast(all, r, g, T);
}
3: when received(C, r, e, ts) ⇒ { g = e; T = r; // adota estimativa e envia ack
send (C, r, ack); }
when received (DF, (DF suspected (C)) ⇒ send (C, (C rr, nack);
4: if (C == myself) { // coordenador difunde se tiver recebido maioria acks
espere por (n+1)/2 mensagens (q, r, ack) ou (q, r, nack)
if (# acks >= (n+1)/2 ) {d = g; R-mcast(all, r, d, decided) }
}
when ¬ decided && R-receiv (any, r, g, decided) { // escolha final
d = g; decided= true;
}
}
© Markus Endler
20
Terminação de Chandra&Toueg
Proposição: Cada processo correto eventualmente chega ao estado
decided.
Dois Casos:
a) Se um Pi correto decide, então este executou R-receive
(..,decided). Pela propriedade de R-mcast, todos decidem.
b) Nenhum processo correto em algum momento decide. Precisa-
se mostrar que isto não ocorre:
1. Que nenhum processo correto fica indefinidamente
bloqueado em qualquer comando “espere”.
2 Que existe um processo coordenador que recebe (n+1)/2
2.
acks
© Markus Endler
Terminação de Chandra&Toueg
Prova de 1:
• Seja r a menor rodada em que um processo correto fica
bloqueado. Logo todos os processos corretos executaram etapa
1 da rodada r e enviaram ((n+1)/2) estimativas para C. (pois
etapa 1 não é afetada pelo bloqueio).
bloqueio)
Como comunicação é confiável, em algum momento C recebe
todas as estimativas e executa mcast(all, r, e, T), que faz com
que todos os corretos eventualmente recebam a mensagem e
não fiquem bloqueados.
Se C falhar, devido a completude forte de ാS, para todos os
processos corretos, existe um momento em que a falha de C é
permanentemente detectada (suspected(C))
Portanto nenhum processo correto fica bloqueado na etapa 3
Portanto, 3, e
todos enviam ACK ou NACK para C. Como existem ((n+1)/2)
corretos, C também não pode ficar bloqueado na fase 4.
Logo, todos os processos corretos irão completam a rodada r.
© Markus Endler
21
Terminação de Chandra&Toueg
Prova de 2: Existência de um Pi que decide:
© Markus Endler
© Markus Endler
22
O Algoritmo Paxos
Paxos [Lamport, 98] é outro algoritmo para consenso de
N processos baseado no paradigma do líder.
Usa o detector de falha Ω, que retorna somente um valor -
o de um processo correto, e garante:
Existe um momento t a partir do qual existe
extamente um processo correto PL que nunca é
suspeito por qualquer outro processo correto.
Idéia basica do Paxos: A cada momento cada processo
considera um pprocesso correto ((PL)) como líder
(escolhido por Ω) , e é este líder que tenta chegar ao
consenso. Se PL falha, em algum momento Ω vai
selecionar outro processo correto como líder.
L. Lamport, The Part-Time Parliament, ACM Transactions on Computer systems
Nr. 16, 2, May 1998. começa: “Recent archeological discoveries on the island of
Paxos reveal that the parliament functioned ...” © Markus Endler
Paxos
Se um processo Pi se considera líder, inicia um novo
“round”, que pode assumir valores(*):
RoundNumber (RN): i, i+n, i+2n, i+3n, ... etc.
Desta forma, cada número de rodada será único. Isto é
necessário, pois vários processos podem se considerar
líderes simultaneamente, e portanto, vários consensos
podem estar acontecendo concomitantemente.
Cada rodada consiste de 2 fases:
1.Líder
1 Líder verifica se os participantes ainda não participaram de um
consenso com número de rodada maior ,e espera por confirmação
da maioria (se recebe um NACK, aborta e passa para nova
rodada).
2. Líder envia um accept_req para os participantes com o valor de
consenso proposto, e espera por confirmação da maioria, Se
recebeu, confirma para todos.
© Markus Endler
23
Paxos
Fase 1:
Líder difunde “prepare(RN)” para todos
Particpante aceita, i.e. responde com ACK (v, RN) (*) sse:
RN é maior
i d do que qq propostat d
de consenso aceita
it e
ainda não aceitou a nenhuma proposta com número de rodada
> RN
Senão,responde com NACK, e rejeita o
(*) o ACK vem com o RN do momento em que a proposta foi aceita
Líder espera a resposta de pelo menos N+1/2. Se só recebeu
ACK, decide qqual é o valor a ser p
porposto,
p senão aborta o p
processo
e recomeça Fase 1 com RN+n.
Fase 2:
Líder difunde msg “accept (d)”, e espera resposta da maioria com
ACK. Se for o caso, difunde a msg decided, senão aborta o
consenso e redefine o RN
© Markus Endler
Paxos
Propose(v) Decided(d))
ACK Succeed
prepare Confirmed accept ACK -Voted
PL
P2
P3
P4
Fase 1 Fase 2
© Markus Endler
24
Consistência Interativa
É uma variante do problema do consenso.
Para N processos, todos os processos corretos devem entrar
em acordo sobre um vetor de valores v[N], onde cada
elemento
l d
do vetor v[i]
[i] corresponde
d ao valor
l proposto por
processo Pi.
Exemplo: v[i] poderia conter o estado de Pi (correto ou
faltoso)
© Markus Endler
Ci(v1,v
v2,..,v
vN) retorna o valor de decisão de Pi
Pi, onde
v1,v2,..,vN são os valores propostos pelos processos
25
Equivalência dos Problemas
Construindo uma solução a partir de outra conhecida:
CI usando PGB:
Execute PGB N vezes,
vezes uma vez para cada processo no
papel de comandante, e use
CIi(v1,v2,..,vN)[j] = PGBi(j,vj)
© Markus Endler
26