750 likes | 889 Views
Distributed consensus. Problemi legati al consenso di due o più processi. 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. Alcuni esempi.
E N D
Distributed consensus Problemi legati al consenso di due o più processi 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
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
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
Fallimento dei Link 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 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 0 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 0 0 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 0 0 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 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) } Esempio: 0 0 0 P1 1 0 1 2 2 1 3 2 3 4 4 3 n = 2 r = 6 5 4 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. 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