Consensus in the presence of partial synchrony Cynthia Dwork, Nancy Lynch, and Lary Stockmeyer 1985 Discussão dos algoritmos g e modelos Por Prof. Raimundo Macêdo, LaSiD/DCC/UFBA Sincronia parcial 1 Δ/Φ é conhecido 1. h id ((canais i e processadores d síncronos) í ) 2. Δ/Φ é desconhecido: para cada Run, existe Δ/Φ que é válido em [1,infinito) 3. Δ/Φ é conhecido e válido em algum instante: para cada Run, existe T onde Δ/Φ é válido em [T,infinito) [1,infinito) significa que desde o tempo 1 até antes do infinito Δ/Φ (n conhecido) é válido [T,infinito) significa que existe um tempo T desconhecido a partir do qual Δ/Φ é válido Se (2) ou (3) é válido, então processadores (Φ) e/ou canais de comunicação (Δ) são síncronos parciais Critérios de Correção Suposições (assumptions) A-ΔeΦ F - modelo de falhas N – número de processadores t - resiliência 0 ≤ t ≤ N Considere C = N – t, o conjunto dos processadores corretos, e qualquer Run satisfazendo A Considere também que processadores fora de C são caracterizados por F •Consistência: q quaisquer q dois p processadores em C não decidem p por valorem distintos •Terminação: Se Run é infinito, então cada processador de C faz um decisão •Unanimidade forte: se todos valores inicias (V) são idênticos e iguais a v, se algum processador em C decide, então decide por v •Unanimidade fraca: se todos valores inicias (V) são idênticos e iguais a v, se algum processador em C decide e |C| = N, então decide por v Modelo básico baseado em rodadas (Basic Round Model) Processamento é dividido em rodadas de síncronas de troca de mensagens Cada rodada •send •receive •computation Não necessariamente todas as mensagens enviadas numa rodada são entregues na mesma rodada (algumas podem ser perdidas), mas GST ---- existe uma rodada a partir da qual todas a mensagens enviadas por processadores corretos são entregues na rodada em que foram enviadas N h Nenhum processador d conhece h GST Protocolos de Consenso para o modelo básico de rodadas Alegação (claim) – a ser provada Os protocolos descritos satisfazem unanimidade forte Notações dos algoritmos Proper ope Value: a ue se todos odos os valores a o es iniciais c a s são v,, v é o único ú co p proper ope value; se pelo menos 2 valores iniciais são distintos, qualquer valor inicial é um proper value. Processadores mentem uma variável proper que é sempre atualizada e sempre transmitida (biggybacked) junto a todas mensagens enviadas Consenso para fail-stop e omissions Algoritmo 1: N ≥ 2t + 1 Considere pi Proper := vi Mensagens transmitidas carregam proper (m.proper) Mensagens recebidas atualizam properi; properi := properi ∪ m.proper (para cada receive[m.proper]). ÆProperi sempre terá proper value (fácil verificar) As rodadas são organizadas numa seqüência de fases Trying (3 rodadas) Lock-release Lock release (1 rodada) Fase h pertence ao processador h mod N Essência do algoritmo --- fase k para pi , onde i = k (mod N) – 4 rodadas 1ª rodada : todos enviam p para p pi seus valores acceptable. p Então, p pi testa: existe um ou mais valores que são acceptable para N – t processadores? Se sim propõe um valor v (se existe mais de um possível, escolhe um aleatoriamente) 2ª rodada: pi broadcast valor proposto (v,k) Processos que recebem (v,k), adotam (v,k), liberando outros locks em v 3ªª rodada: quem recebeu ((v,k), ) send ((ack,k)) pi testa: se recebeu t + 1 (ack,k). Caso positivo decide (obs: veja que agora existem t+1 processadores que trancaram (v,k) e pelo lema 3.1.2 v continuará trancado em k ou k’ k’ >k k’, >k. Î não ã há possibilidade ibilid d d de existir i ti um valor l w, w ≠ v, onde d N – t reconhecem h w como acceptable ..... Porque no máximo teríamos t + 1 Discussão Um valor v somente é acceptable p se é o único trancado (p (por definição ç e acceptable) p ) Para haver um valor w ≠ v que fosse proposto por pi, pi teria que ter recebido de N-t processos w como acceptable... Ora, isso é impossível por que t +1 processos têm v como acceptable (e não vão mudar de opinião – lemmas 1 e 2). Prova (considere os quoruns abaixo) ((a)) quorum t+1: processos que têm v trancado (b) quorum N - (t+1) : processos que não necessariamente teriam v trancado e portanto poderiam ter w como acceptable ( ) quorum N - t : processos que precisariam (c) i i tter w como acceptable t bl para propor w Para que w seja proposto e portanto acceptable para N-t, teríamos... b ≥ c Î N – t – 1 ≥ N – t Î N – N ≥ t – t + 1 Î 0 ≥ 1 (impossível) Ou seja, se t + 1 decide v, resta então N - t -1 o que não é suficiente para n-t propor w. Outras discussões (contribuições): qual a relação entre t e N? 1) a ≤ N (para que seja possível uma decisão) Î t + 1 ≤ N Î t < N 2) a ∩ c ≠ vazio para garantir consistência consistência. Para que isso ocorra é necessário que |a| + |c| > N. Î t+1+N-1 = N + 1 > N. 3) Existem dois WAITs no programa (pelos quoruns a e c). Outras discussões (contribuições): qual a relação entre t e N? 1) a ≤ N (para que seja possível uma decisão) Î t + 1 ≤ N Î t < N 2) a ∩ c ≠ vazio para garantir consistência. Para que isso ocorra é necessário que |a| + |c| > N. N Î t+1+N-1 = N + 1 > N N. Isso portanto é sempre garantido 3) Existem dois WAITs no programa (pelos quoruns a e c). Wait N – t (sempre termina, pois N – t são corretos) Wait t + 1 (depende da relação entre t e N – vide abaixo) Ou seja, o quorum t + 1 precisa ser menor ou igual ao numero de processos corretos N - t T + 1 ≤ N – t Î N ≥ 2t + 1 (i) Dado que (i) seja verdadeiro, qual o valor máximo para t? Seria quando N = 2t + 1Î t = (N-1)/2 Os dois quoruns ficam assim: N-t Î N – (N-1)/2Î (N+1)/2 .................. t + 1Î (N-1)/2 + 1Î (N+1)/2 Devido a N pares, deve-se usar o teto de (N+1)/2 Mais discussões Se enfraquecermos a condição N ≥ 2t + 1, para, por exemplo, N ≥2t e alternarmos o Al it Algoritmo para na 3ª rodada d d ffazer WAIT t acks k (ao ( invés i é d de tt+1), 1) então tã pode d haver h Inconsistência, apesar de garantir terminação. Portanto para que haja interseção nos quoruns Portanto, quoruns, garantindo a terminação N ≥ 2t + 1. 1 Um processador pode trancar um valor v em vários instantes do algoritmo; existe sempre um número de fase associado a um lock. *** quando um valor v é trancado em pi? Quando pi recebe uma mensagem lock (v,k) e manda uma ack na forma (ack, ) Observe q que somente existe um único k p para cada valor v ((lemma 3.1.1).... ) k).... Cada pi pode ter mais de um valor trancado *** quando um lock é liderado? Se p locks v na fase k = i mod N, então p crê que processador pi pode decidir v na fase k P somente libera lock (k,v) se aprende que sua suposição é falsa. Ou seja, que “processador processador pi poderia decidir v na fase k” k é falso Um valor v é acceptable p p para p se p não tem outro valor com lock ((i.e,, somente tem lock em v) .... O algoritmo Considere uma fase k i = k mod N s = 4k – 3 (primeira rodada de uma seqüência de 4 rodadas da fase k) Rodada s – para todos os processadores – send Cada processo envia {proper ∩ accaeptable) para pi; obs: no inicio apenas o valor inicial Ou seja, Send(pi, list); onde list = {proper ∩ accaeptable) e pi é o coordenador ou responsável da fase k Rodada s – para pi– receive pi faz receive(p); wait receive de N - t Rodada s – para pi somente – computation pi tenta propor um valor v se para dado v recebeu N-t {proper + accaeptable) então propõe v (se houver mais de um v, um é escolhido aleatoriamente) Considere uma fase k Rodada s+1 = 4k – 2 (segunda rodada de uma seqüência de 4 rodadas da fase k) -etapa send - somente pelo coordenador pi Se para dado v, pi recebeu N-t mensagens {proper ∪ accaeptable) então Send(pj, (pj msg) g) p para cada pj pj, onde msg g = ((lock k,v)) (se houver mais de um v, um é escolhido aleatoriamente) senão va para a proxima fase k + 1 Rodada s+1 = 4k – 2 (segunda rodada de uma seqüência de 4 rodadas da fase k) Etapa receive – todos processadores Se foi recebido (lock,k,v) então lock v,k S Senao va para ffase k +1 Considere uma fase k Rodada s+2 = 4k – 3 (terceira rodada de uma seqüência de 4 rodadas da fase k) Etapa send – todos processadores Se foi recebido (lock (lock,k,v) k v) Send(pi,k,ack) – envia ack k para coordenador pi Libera qualquer outro lock em v Outros locks em outros valores não são liberados Rodada s+2 = 4k – 3 (terceira rodada de uma seqüência de 4 rodadas da fase k) Etapa receive – coordenador pi Se pi recebeu t +1 acks, pi decide v e continua Rodada s + 3 = 4k (Lock-release ) Etapa send Broadcast (v,h) para cada lock (v,h) R d d s + 3 = 4k (L Rodada (Lock-release k l ) Etapa receive Se o processador tem lock (v,h) e recebe lock(w,h`), v≠w e h`> h, então libera lock em v Prova de Correção Lemma 1- valores distintos trancados nunca têm o mesmo número de lock O numero de lock esta associado ao numero fase onde o coordenador tentou gerar o lock. Como somente existe um coordenador por fase e o coordenador não envia mensagens para locks distintos na mesma fase, essa possibilidade é impossível. Lemma 2- suponha que algum processo decide v na fase f k, e k é o menor numero de fase em que uma decisão é feita. Então, pelo menos t + 1 processadores definiram Lock v na fase k (i). Mais ainda, cada processo que criou lock v na fase k, a partir desse momento t sempre terá t á um lock l k para v com numero igual i l ou maior i a k (ii) (ii). Prova. (i) esta claro pelo algoritmo. Para provar (ii), suponha, por absurdo, que (ii) é falso. Assuma que l é a primeira fase na qual um dos locks em v é liberado, sem, contudo, ser substituído por outro lock em v com valor de fase maior que kk. Observe que locks somente são liberados na rodada de lock-release. Portanto, assuma que o lock em (v (v,k) k) foi liberado na fase l quando algum processador aprende que outro processador tem um outro lock (w,h), onde k ≤ h ≤ l. Já que pelo lema 1, não pode existir outro lock num valor w, w ≠ v, com fase k, então: Portanto, podemos inferir que algum processador tem um lock em w com fase associada h, onde K < h ≤ l (i) Por outro lado, para (i) ser verdade, w foi encontrado “acceptable” para N – t processadores na primeira rodada da fase h. O que por sua vez implica que pelo menos N – t processadores não possuem lock em v na primeira rodada da fase h (absurdo). F lh Bizantinas Falhas Bi ti com A Autenticação t ti ã 2 4 Corretude 2.4 • Dadas: – Suposições A sobre os processadores e sobre a sincronia da comunicação; – Um tipo de falha F; e – Um número N de processadores e um inteiro t (0 ≤ t ≤ N) A corretude de um protocolo de consenso t-resiliente é assim definido: 2 4 Corretude 2.4 • Para todo conjunto C contendo ao menos N-t processadores, e toda execução R que: – Satisfaça as condições de A; – os processadores em C sejam corretos; e – Aos processadores que não estejam em C seja permitido o tipo de falta F. F O protocolo deverá garantir: 2 4 Corretude 2.4 • O protocolo deverá garantir: – Consistência: Dois processadores em C não decidam diferentemente. – Terminação: se R for infinita, então todo processador em C faz um decisão. – Unanimidade: U i id d • Unanimidade Forte: – Se todo valor inicial for v, e se todo processador em C decide, então ele decide v. • Unanimidade Fraca: – Se todo valor inicial for v, se C contém todos os processadores, e se todo processador decide, então ele decide v. Protocolo • Definições: D fi i õ – Ej: Função de autenticação de Pj; – v é próprio se: • Todos os processadores iniciam com o valor v; • Existem E i t ao menos d dois i valores l iiniciais i i i dif diferentes, t ev pertence a V. – v é aceitável por Pj se: • Pj não possui trava em algum outro valor diferente de v; – proof: conjunto das mensagens Ej (list,k) recebidos por Pi e em que v é aceitável e próprio. Protocolo (Round 1) • Processo PJ ((send)) – – – – i=mod (k,N) PROPER ← valor inicial List ←valores aceitáveis em PROPER Send Ej (list,k) para Pi • Processo P Pi (i=mod(k,N)) (i d(k N)) ((receive) i ) – Recebe valores iniciais – Ao receber 2t+1 2t 1 mensagens: (compute) 2t +1 (ou seja, não bloqueia) – veja que (3t + 1) – t = • Se não existem t+1 mensagens com um mesmo valor: – PROPER ← todos os valores – domínio V • Se S existem i t+1 1 mensagens com um mesmo valor l v: – PROPER ← v Protocolo (Round 2) • Processo Pi (send) – Se receber ao menos N-t mensagens com um mesmo valor v (qque é acceptable p and p proper p ) ): • Broadcasts Ei (lock v, k, proof) • Processo PJ (receive) – Recebe Ei (lock v, k, proof); – Se já existe lock v em fase h, com h < k: (compute) • Unlock (v,h); (v h); • lock (v,k); Protocolo (Round 3) • Processo P PJ (send) ( d) – Send Ack para Pi • Processo Pi (receive) – Recebe (Ack,k); – Caso receba 2t+1 Ack: (compute) • Decidir v. Protocolo (Lock (Lock-Release) Release) • Processo PJ (send) – Broadcasts Ei (lock v, k, proof) • Processo PJ (receive) – Recebe Ei (lock vv, kk, proof); – Lock (v,k); ( (compute) p ) – Se existe lock(w,h), com h < k e w ≠ v: • Unlock (w,h) – Se existe lock(v,h), com h < k: • Unlock (v,h) Falhas Bizantinas com Autenticação Fase k F Round s=4k-3 Observação: Para k=1 => s=1 k=2 => s=5 etc. Trying Fase Com N-t mensagens eceb das co com o valor ao v recebidas aceitável, v será proposto na fase k P2 P1 E2(list,k) Pn E1(list,k) Pi EJ(list,k): (list k): Lista autenticada de todos os valores aceitáveis por PJ na fase k E3(list,k) EJ(list,k) P3 PJ Com t+1 mensagens recebidas com o valor v aceitável, v será considerado um valor aceitável. i á l Caso C contrário, ái todo o domínio de valores será aceitável. Falhas Bizantinas com Autenticação Fase k F Round s+1 Trying Fase Pn Pi broadcasts Ei(lock v, v k, k proof), proof) propondo o valor v. P2 P1 Ei(lock v, k, proof) Ei(lock v, k, proof) Ei(lock v, k, proof) Pi Ei(lock v, k, proof) Ei(lock v, k, proof) P3 PJ Falhas Bizantinas com Autenticação Fase k F Round s+2 Trying Fase Lock (v,k) Lock (v,k) P2 P1 ack Pn Se forem recebidos ao menos 2t+1 acks, Pi decide por v. ack Decide (v,k) Pi ack ack Lock (v,k) P3 PJ Lock (v,k) Falhas Bizantinas com Autenticação Travam o valor v T processos corretos + 1 Por quê 2t+1 acks são necessários? T processos incorretos T processos corretos Não h Nã haverá áN N-tt processos suficientes que aceitem um outro valor w Falhas Bizantinas com Autenticação Fase k F Round s+3 Lock (v,k) P2 P1 Pn Lock (v,k) Ei(lock v, k, proof) Ei(lock v, k, proof) Lock-release Fase Processos fazem broadcast informando que possuem um lock em v na fase k: Ei(lock v, k, proof) Decide (v,k) Pi Lock (v,k) Se algum processo possuir um lock em um round anterior, irá atualizá-lo no round k Ei(lock v, k, proof) P3 Ei(lock v, k, proof) PJ Lock (v,k) Falhas Bizantinas com Autenticação • Lema 3.4: “É É impossível que dois valores distintos sejam validamente travados (locked) na mesma fase, se esta fase pertencer a um processo correto correto.” • Prova: – Para que dois valores distintos v e w sejam validamente travados na mesma fase, o processo possuidor desta fase precisaria ter enviado mensagens conflitantes propondo valores distintos para processos diferentes diferentes. Logo o processo possuidor da fase não seria um processo correto (contradição). Falhas Bizantinas com Autenticação • • Lema 3 3.5: 5: “Suponha Suponha que algum processo correto decidiu o valor v na fase k, e k foi a primeira fase em que um processo correto fez uma decisão. Portanto ao menos t+1 processos corretos t travaram t o valor l v na fase f k. k Assim, A i cada d um dos d processos corretos que travaram v na fase k sempre terão uma trava em v associada a uma fase igual ou maior do que k.” Prova: – Como ao menos 2t+1 processos enviaram um ack para possibilitar que o processo correto decidisse por v na fase k, então ao menos t+1 processos travaram v na fase k. Para que esta trava seja substituída pela trava em um outro valor w em um round posterior ((k+i), ), um outro processo p deve ter proposto p p este novo valor após p ter recebido mensagens de N-t processos indicando ser w aceitável no round k+i (contradição) Falhas Bizantinas com Autenticação • Lema 3 3.6: 6: “Imediatamente Imediatamente após uma fase lock lockrelease que ocorre após GST (ou em GST), o conjunto de valores travados por processos corretos conterá no máximo um valor.” • Prova: – Direto da regra lock-release, onde um processo que recebe uma mensagem autenticada informando que houve um travamento em um valor v na fase k deverá liberar as travas de fases anteriores, mantendo apenas a trava do valor v na fase k. Falhas Bizantinas com Autenticação • Teorema 3 3.2: 2: “Assuma Assuma o modelo básico com falhas bizantinas e autenticação. Assuma N>=3t+1. Então o Algoritmo 2 garante consistência, unanimidade forte e terminação para um domínio arbitrário de valores.” • Prova: – A prova de consistência e unanimidade forte é idêntica a prova do d T Teorema 1 1. – Para garantir terminação (segue) Falhas Bizantinas com Autenticação • Prova(Teorema 3 3.2 2 - Terminação): – Considere uma trying fase k, pertencente a um processo correto P, que é executada após uma fase lock-release, ambas tendo ocorrido após GST. – Pelo lema 3.6 existe ao máximo um valor travado por um processo correto no início da trying fase k. • Se este valor existir,, ele deve ser considerado próprio p p p por N-t processos (destes N-2t >= t+1 corretos) no início da trying fase k. Estes processos comunicaram (durante a fase lockrelease) a todos os processos que v é um valor aceitável e com isso co sso v foi o considerado co s de ado ace aceitável tá e po por todos os p processos ocessos corretos no início da trying fase k. • Caso não haja nenhum valor travado, todos os valores são considerados próprios. • O processo dono d d da ffase poderá d ád decidir idi por um valor l aceitável itá l por todos os demais processos corretos. Seminários 1) 2) 3) 4) 5) 6) 7) Recuperação pró-ativa de falhas T Testes d robustez de b através é d de iinjeção j d de ffalhas lh Consistência de Réplica Armazenamento estável C Comunicação i ã em G Grupo em Si Sistemas t Di Distribuídos t ib íd Híb Híbridos id State-Machine Approach Distributed Checkpointing