Distributed consensus Problemi legati al consenso di due o più processi Seminario a cura di Oscar Pistamiglio e Federico Vietti
Seminario a cura di Oscar Pistamiglio e Federico Vietti Problema del consenso Definizione - Sono quei problemi in cui si hanno vari processi connessi tra loro, i quali devono cooperare per ottenere un risultato comune, indipendentemente dal tipo di input. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Seminario a cura di Oscar Pistamiglio e Federico Vietti Alcuni esempi Transazioni su database distribuiti Applicazioni in rete Stima dell’altezza di un aereo grazie alla lettura di altimetri In generale sistemi privi di memoria comune Seminario a cura di Oscar Pistamiglio e Federico Vietti
Seminario a cura di Oscar Pistamiglio e Federico Vietti Tipologie di ambiente Senza fallimenti Fallimento: A livello di link Versione deterministica Versione Randomized A livello di processo Failure Stopping Byzantine Stopping Seminario a cura di Oscar Pistamiglio e Federico Vietti
Seminario a cura di Oscar Pistamiglio e Federico Vietti Fallimento dei Link Seminario a cura di Oscar Pistamiglio e Federico Vietti
Seminario a cura di Oscar Pistamiglio e Federico Vietti Fallimento dei link: Sono fallimenti legati alla consegna dei messaggi: A invia un messaggio a B, ma questi non lo riceve ed A non rileva il fallimento Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Problema dell’attacco coordinato: Si hanno n generali che devono attaccare un obiettivo comune. La riuscita dell’attacco si ha solo se tutti gli n generali decidono di attaccare contemporaneamente. Il coordinamento è realizzato tramite scambio di messaggi […] Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Problema dell’attacco coordinato: […] Ogni generale attacca solamente se lo stato del suo esercito è buono. In questo caso invia un segnale positivo agli altri, altrimenti negativo. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Fallimenti dell’attacco coordinato: I messaggeri, che viaggiano a piedi, possono essere vittime di imboscate del nemico, con conseguente perdita del messaggio perdita di coordinamento nell’attacco. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei link: Versione Deterministica Attacco coordinato Consenso N generali N processi Stato Esercito (buono, non buono) Stato iniziale: {1 - buono,0 - altrimenti} Decisione bellica {0 - pace, 1 - attacco} Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Condizioni per decidere: Agreement (accordo): 2 processi non possono decidere in modo diverso Validity: Se tutti i processi iniziano con 0, la decisione è 0. Se tutti i processi iniziano con 1 e tutti i messaggi sono stati recapitati, l’unica decisione possibile è 1 Termination: ogni processo decide per se Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica {0,1} {0,1} Processi che interagiscono tra loro mediante gli archi di un grafo G <V,E> non orientato e connesso {0,1} {0,1} {0,1} {0,1} {0,1} {0,1} Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Vogliamo dimostrare che non esiste un algoritmo A che risolve il problema utilizzando le condizioni di decisione precedentemente citate. Per semplicità utilizzeremo un grafo di due nodi connessi da un arco Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Ipotesi: G = <V,E> V = { 1, 2 } E = { (1,2) } { Condizioni precedenti } Tesi: Non esiste algoritmo risolutivo Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Dimostrazione per assurdo: Ad ogni esecuzione ciclica dell’algoritmo del processo i viene inviato un messaggio a tutti gli altri processi, contenente il proprio valore di decisione. Ogni ciclo dell’algoritmo è chiamato round “r” P2 P1 1 1 Decisione Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Dimostrazione per assurdo: La sequenza di messaggi verrà denotata con il simbolo ⍺. Riportata qui di fianco c’è la sequenza ⍺. In questo caso al termine degli r-esimo round entrambi i processi decideranno 1, quindi i generali attaccano. P2 P1 1 1 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Dimostrazione per assurdo: Chiamiamo questa sequenza di messaggi come ⍺1. Questa sequenza è uguale alla precedente ad eccezione dell’assenza dell’ultimo messaggio. Infatti fallisce la ricezione dell’ultimo messaggio di P1. Per P1 la sequenza è indistinguibile dalla precedente P2 P1 1 1 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica L’ indistinguibilità di una sequenza ⍺ da una sequenza ⍺1 da parte di un certo processo Py si indica con: y ⍺ ~ ⍺1 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Dimostrazione per assurdo: Se creiamo un’altra sequenza ⍺2 che differisce dalla precedente per l’assenza di un arco che va da P2 a P1, avremo che per P2 questa sequenza sarà indistinguibile dalla precedente, ossia: P2 P1 1 1 Decisione per entrambi uguale a 1. 2 ⍺1 ~ ⍺2 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Dimostrazione per assurdo: Se continuiamo su questa strada, rimuovendo alternativamente un arco da entrambe le parti. Raggiungeremo una sequenza ⍺’ in cui i messaggi non sono consegnati. I processi sono forzati a decidere 1 in questo caso. P2 P1 1 1 Decisione per entrambi uguale a 1. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Dimostrazione per assurdo: Supponiamo di avere la sequenza ⍺’’ in cui nessun messaggio è consegnato. Ma il valore iniziale di P2 stavolta è 0. P2 è forzato a decidere 1 in questo caso perché P1 deciderà 1 visto che per lui: P2 P1 1 Decisione per entrambi uguale a 1. 1 ⍺’’~ ⍺’ Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Dimostrazione per assurdo: A questo punto immaginiamo la sequenza ⍺’’’ in cui nessun messaggio è consegnato, ma entrambi i processi sono inizializzati a 0. Siccome per P2 non c’è alcuna differenza rispetto alla sequenza precedente: P2 P1 2 ⍺’’’~ ⍺’’ Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Deterministica Dimostrazione per assurdo: P2 deciderà nuovamente 1 perché non è cambiato nulla rispetto a prima. Mentre P1 deciderà 0 P2 P1 Assurdo! C.V.D. Decisione spaiata in disaccordo con l’Agreement Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized In questa versione si inseriscono delle supposizioni ulteriori: Che il protocollo di comunicazione termini dopo r round (cicli dell’algoritmo con spedizione di messaggi) Che ci sia una probabilità di errore ε, ovvero che possa succedere che i processi non raggiungano lo stesso risultato Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Con probabilità di errore si intende con quale probabilità sia il disaccordo tra i processi a causa di messaggi non recapitati Quel che vogliamo fare è cercare di stabilire qual è la relazione che c’è tra la probabilità di errore ε ed il numero di round Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Premessa: la difficoltà di calcolo della stima è data soprattutto da quali messaggi sono perduti ci poniamo nel caso peggiore: un avversario che cerca di impedire il corretto raggiungimento del consenso: Input Communication pattern Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Formalizzazione delle condizioni(1) Communication Pattern E’ un sottoinsieme ω dell’insieme così definito: {(i,j,k): (i,j) è un arco del grafo, e k≥1} Ovvero di tutte le triple che contengono i due nodi di un arco ed un intero. Un elemento appartenente ad ω indica che al round k è stato inviato un messaggio da i a j. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Un communication pattern è definito “buono” se per ogni elemento di ω, k < r, ed in quel caso si può utilizzare come descrittore dell’insieme di messaggi che sono stati inviati in una esecuzione Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Formalizzazione delle condizioni (2) Agreement: per ogni avversario B abbiamo che: PrB[ alcuni processi decido per 0 o decidono per 1 ] < ε Validity: la stessa di prima Non è necessaria la termination (terminano in r round) Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Per questo problema del consenso in versione non deterministica presentiamo un algoritmo che fissa la probabilità di errore ε in questo modo: Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Premesse: L’algoritmo necessita di alcune conoscenze che un processo deve avere: i valori iniziali di ogni altro processo; cosa sanno gli altri processi sui valori iniziali di tutti gli altri processi. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Premesse: Si fissa un ordinamento su ogni communication pattern ω: (i,k) ≤ω (i,k’) per 1 ≤ i ≤ n e 0 ≤ k ≤ k’ se (i,j,k) appartiene a ω, allora (i,k-1) ≤ω (j,k) se (i,k) ≤ω (i’,k’) e (i’,k’) ≤ω (i’’,k’’) allora (i,k) ≤ω (i’’,k’’) Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Premesse: Si fissa information level : levelω(i,k) di ogni processo i al round k, con 0 ≤ k ≤ r, così definito ricorsivamente: se k = 0 levelω(i,k) = 0 se k > 0 e j != i e (j, 0) ≰ω (i, k) levelω(i,k) = 0 Ed in questo modo si definiscono i casi base. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized k > 0 e (j, 0) ≤ω (i, k) per ogni j != i per ogni j != i lj = max {levelω(j,k’) : (j, k’) ≤ω (i, k) } lj è il più grande livello che i conosce per il nodo j levelω(i,k) = 1 + min {lj : j != i} Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Sintetizzando: ogni processo inizia con livello 0 e quando riceve un messaggio modifica il proprio livello inserendo il valore del livello del processo mittente del messaggio incrementato di 1. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Esempio: Rounds Communication pattern ω = { (1,2,1), (1,2,2), (2,1,2), (1,2,3), (2,1,4), (1,2,5), (2,1,5), (1,2,6) } P1 1 1 2 1 2 2 3 3 4 3 4 n = 2 r = 6 4 5 5 4 5 6 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Un lemma fondamentale è il seguente: Per ogni buon communication pattern ω ed ogni k, 0 ≤ k ≤ r, ed ogni i e j, | levelω(i,k) - levelω(j,k) | ≤ 1 Cioè i livelli di ogni nodo differiscono al più di una unità Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Questo si dimostra intuitivamente pensando che tutti i livelli sono inizializzati a 0 e poi il livello di ogni processo ad un certo round k è dato dal proprio livello al round precedente oppure dal massimo livello degli altri processi incrementati di 1. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Altro lemma fondamentale è il seguente: Per ogni buon communication pattern ω completo (cioè contenente tutte le possibili triple (i,j,k)): levelω(i,k) = k per ogni i e k Cioè se la comunicazione non ha errori allora ad ogni round il livello è uguale al numero del round stesso Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Anche in questo caso la dimostrazione è intuitiva, cioè se non ci sono messaggi mancanti ad ogni round il livello è incrementato di 1 e quindi al round k il livello è k stesso. Conseguenza: se non ci sono errori al termine dello scambio di messaggi il livello è uguale ad r Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Vediamo ora una definizione informale dell’algoritmo: ogni processo tiene traccia del proprio livello nella variabile level valutando i communication pattern che gli giungono; Il processo 1 crea un valore key compreso tra 1 ed r; Il valore key è inserito in tutti i messaggi spediti; Nei messaggi è anche inserito la descrizione dei valori iniziali di tutti i messaggi; Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized dopo r round ogni processo valuta quale decisione prendere e decide per 1 solo se le seguenti condizioni sono verificate: se il livello calcolato è grande almeno come key; se i valori iniziali di tutti i processi sono a 1 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Formalizziamo l’algoritmo e definiamo l’alfabeto di ogni messaggio, che è nella seguente tripla: (L, V, k) dove L è il vettore dei livelli precedenti alla elaborazione che farà il processo che riceve il messaggio; V è un vettore che può assumere i valori {0,1,undefined} e rappresenta gli eventuali valori iniziali di ogni processo k è il valore della chiave decisa dal processo 1 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Statesi: rounds ∈ N, inizialmente 0 decision ∈ {unknown, 0, 1}, inizialmente unknown key ∈ [1, r] ∪ undefined, inizialmente undefined per ogni j, 1 ≤ j ≤ n: val(j) ∈ {0, 1, undefined}; inizialmente val(i) è il valore iniziale del processo e val(j) = undefined per ogni i != j level(j) ∈ [-1,r]; inizialmente level(i) = 0 and level(j) = -1 per ogni i != j Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized randi: se i = 1 e rounds = 0 allora key := valore casuale msgsi: send (L, V, key) a tutti i j, in cui L è il vettore dei livelli interno al processo e V è il vettore dei valori iniziali Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized transi: rounds := rounds + 1 (Lj,Vj,kj) sono i messaggi ricevuti da j, per ogni j da cui è arrivato un messaggio se c’è qualche kj definito key := kj per tutti j != i se c’è qualche Vj(j) definito val(j) := Vj(j) se c’è qualche Lj(j) > level(j) level(j) := max {Lj(j)} level(i) := 1 + min {level(j): j != i} Se rounds = r se key è definito e level(i) ≥ key e val(j) =1per ogni j decision := 1 altrimenti decision := 0 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized Esempio: Il processo 1 sceglie una qualsivoglia key compresa tra 1 e 6. Al momento del r-esimo round ogni processo valuta la decisione da prendere confrontando i dati raccolti fino al tempo r. Per decidere viene fatto un confronto tra la chiave e il livello raggiunto […] Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized […] ogni processo ha un proprio livello. Se vi è stata una perdita di messaggi i livelli sono minori di r. La differenza tra i livelli è sempre minore o uguale a 1. Come detto inizialmente il fallimento dell’algoritmo si ha con il disaccordo dei processi, evento che si verifica una volta su r round […] Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento del link: Versione Randomized […] ossia quando tra i processi, quello con valore di livello massimo ha tale valore uguale alla chiave (una volta su 6), e vi è almeno un processo con valore di livello differente. Level al round 6 Risultato P1 P2 1 Accordo 2 3 4 5 Disaccordo 6 key = 5 n = 2 r = 6 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi Vi sono 2 tipi di fallimento: Stopping failure I processi falliscono senza dare nessun tipo di allarme Byzantine failure I processi che falliscono mostrano un comportamento casuale Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi Il problema Abbiamo una rete composta da n-nodi connessi in un grafo non orientato Tutti i processi iniziano con un input fisso tratto da un insieme di valori V Obiettivo: arrivare ad una decisione comune valutando i valori iniziali Il numero di processi falliti è al massimo f Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi Siccome stavolta intervengono i fallimenti, questi verranno considerati non in termini probabilistici, ma fissandone un limite superiore f Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Condizioni di correttezza: Agreement: 2 processi non possono decidere in modo diverso Validity: Se tutti i processi partono con un valore v appartenente all’insieme V, allora questo è l’unico valore possibile di decisione Termination: Tutti i processi che non falliscono decidono Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Byzantine Failure Condizioni di correttezza: Agreement (new): 2 processi non falliti non possono decidere in modo diverso Validity (new): Se tutti i processi non falliti partono con un valore v appartenente all’insieme V, allora questo è l’unico valore possibile di decisione per i processi non falliti Termination: Tutti i processi che non falliscono decidono Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Tre algoritmi per risolvere il problema: FloodSet - algoritmo di base OptFloodSet - FloodSet a complessità ridotta EIG – Exponential Information Gathering Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Algoritmo informale: Ogni processo ha una variabile W che è un sottoinsieme di V, inizialmente contenente il valore iniziale del processo. Ad ogni round, che sono f+1, ogni processo invia in modalità broadcast, la sua W. Al momento della ricezione del messaggio dagli altri processi, aggiorna la sua W, aggiungendogli i valori di W inviati dagli altri processi [...] Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure [...] dopo f+1 round il processo decide v0 se il suo W è composto da più di un elemento, se invece W è un singoletto decide per l’elemento contenuto Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Val. 2 1 3 4 f = 1 n = 4 W1 = { 1 } W2 = { 1 } 1 2 Proc. Val. 1 3 4 Round = 0 Proc. Val. 1 2 3 W3 = { 1 } Proc. Val. 1 2 4 3 4 W4 = { 1 } Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Il processo 2 fallisce Proc. Val. 2 3 1 4 f = 1 n = 4 W1 = { 1 } 1 2 W2 = { 1 } Round = 1 Proc. Val. 1 2 3 W3 = { 1 } Proc. Val. 1 2 4 3 4 W4 = { 1 } Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Il processo 2 fallisce Proc. Val. 2 3 1 4 f = 1 n = 4 Decision1 = 1 W1 = { 1 } 1 2 W2 = { 1 } Round = 2 Proc. Val. 1 2 3 W3 = { 1 } Proc. Val. 1 2 4 3 4 Decision3 = 1 Decision4 = 1 W4 = { 1 } Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Algoritmo FloodSet (formale): Statesi: rounds ∈ N, inizialmente 0 decision ∈ V U {unknown}, inizialmente unknown W⊆V, inizialmente il singoletto contenente il valore iniziale del processo i Msgsi: If rounds ≤ f allora invia W agli altri processi Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure transi: rounds := rounds + 1 Sia Xj un messaggio del processo j, per ogni j dal quale i riceve un messaggio Wi = Wi U Uj Xj Se rounds = f + 1 allora se |W|=1 allora decision = v dove W = { v } altrimenti decision = v0 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Algoritmo EIGStop: Ogni processo dispone di un albero. Su ogni nodo avrà un valore (val(x)) che gli comunicano gli altri processi. Il nodo radice (chiamato λ) avrà il valore iniziale val(x) del processo stesso. Round 1: Il processo i-esimo invia il suo val(x) a tutti gli altri processi. Il processo i riceverà quindi i messaggi provenienti dagli altri processi contenenti il valj(x) [...] Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure [...] se v appartenente a V arriva a i da j allora i registra il valore v in val(j) altrimenti se non arriva un messaggio con un valore non appartenente all’insieme i registrerà val(j)=null [...] Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure [...] Round k (2 ≤ k ≤ f +1): il processo i invia a tutti gli altri le coppie (x,v) dove x è il valore di un nodo a livello k-1 sull’albero T Se xj è un nodo a livello k in T, dove x è una stringa e j è un indice singolo e il messaggio dice che val(x) = v appartenente a V ed arriva a i da j, allora i setta val(xj) a v Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure Livelli 1 2 3 4 EIG Tree Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Stopping Failure 1 2 Esempio 1 null 2 3 1 3 null null 1 null 2:3 3:2 1:3 3:1 1 3 Crash! Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Byzantine Failure L’algoritmo che descriveremo per risolvere il problema, EIGByz, è uno tratto dal EIGstop. Premessa importante per tutti gli algoritmi che risolvono questo problema è la seguente:è sempre fissato che il numero dei processi deve essere maggiore di tre volte il numero dei fallimenti. Cioè: n > 3f Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Byzantine Failure Algoritmo EIGByz: L’algoritmo è uguale a EIGStop con le seguenti differenze: Se un processo riceve un messaggio che non è nella forma corretta non lo considera e si comporta come se non l’avesse ricevuto (cioè mette valore NULL); Al round f+1 il processo sostituisce i valori NULL nell’albero con il valore v0; Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Byzantine Failure Nel momento della decisione il processo parte dalle foglie fino alla radice inserendo un nuovo valore newval(x) per ogni nodo x. Se nodo è foglia newval(x) = val(x) Altrimenti newval(x) = m dove m è il valore che maggiormente si trova nelle varibili newval nei figli di x. Se un valore di maggioranza non c’è si inserisce val0. Seminario a cura di Oscar Pistamiglio e Federico Vietti
Fallimento dei processi: Byzantine Failure Il valore di decisione è preso andando a vedere cosa c’è, alla fine dell’esecuzione precedentemente descritta, nel valore newval del nodo radice, newval(λ). Seminario a cura di Oscar Pistamiglio e Federico Vietti
Esempio: n=4, con l’albero del processo 1 EIG Tree 5 5 1 2 3 4 5 5 5 5 5 5 5 5 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 3 5 5 5 2 5 5 5 1 1 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 Il processo quattro impazzisce e spedisce messagi a caso 2 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 7 5 2 1 8 9 3 7 2 8 3 5 1 3 Seminario a cura di Oscar Pistamiglio e Federico Vietti
Seminario a cura di Oscar Pistamiglio e Federico Vietti The End Seminario a cura di Oscar Pistamiglio e Federico Vietti
Seminario a cura di Oscar Pistamiglio e Federico Vietti Bibliografia Lynch, Distributed Algorithms, Ed. Kaufmann Seminario a cura di Oscar Pistamiglio e Federico Vietti