Translate

sabato 27 ottobre 2018

BLOCKCHAIN - IL CONSENSO DEI SISTEMI DISTRIBUITI Part.1

Per capire la tecnologia blockchain abbiamo bisogno di approfondire il cuore di ciò che sembra blockchain da una prospettiva tecnica: i sistemi distribuiti.

La blockchain per esempio rappresenta un tipo specifico di sistema distribuito...

Quindi la domanda che ti devi fare è: che cos'è un sistema distribuito?

Per iniziare possiamo dire che i sistemi distribuiti contengono due particolari categorie di componenti.

La prima categoria viene definita "nodi", possono assomigliare come concetto ai BITCOIN nella Blockchain, oppure alle CPU nel caso di un Server 

>> I nodi sono pensati per rappresentare macchine o processi separati
     (ES. simile ai core della CPU nel tuo laptop o ai bitcoin nella blockchain ) .

>> La seconda categoria viene definita "trasmissione di messaggi", rappresentati come frecce, o  "spigoli" come vengono chiamati nel contesto di teoria dei grafici.

   Es. il loro scopo è quello di dimostrare che le informazioni possono muoversi tra macchinari.

Domanda >>. "Perché i sistemi distribuiti sono importanti? /   Cosa c'è che non va  in un singolo sistema? " e .. cosa centra la BLOCKCHAIN ?



Consideriamo un sistema distribuito come una macchina ... :

>> Nel caso di una singola macchina ---> Le macchine nel mondo reale possono essere difettose, bloccarsi, perdere memoria, o addirittura corrompesi.

>> Mettendo insieme molte macchine per raggiungere un obiettivo comune invecechè semplicemente avere una singola macchina, questo porta il vantaggio  principale di un sistema più affidabile, xchè anche se una macchina si spegne, non è la fine del mondo, in quanto il resto del sistema così come concepito ( insieme di macchina ) continua a funzionare,



- PROPRIETA' DEI SISTEMI DISTRIBUITI 

Le proprietà dei sistemi distribuiti si possono elencare in:

> Concorrenza, cioè i componenti di questo sistema elaborano le informazioni  contemporaneamente ( al contrario di un singolo processo ).

>> Non esiste un orologio globale, sebbene tutti i nodi del sistema si adoperino per rimanere sincronizzati, nessuno di questi ha accesso all'ora corrente. Ogni nodo è responsabile del mantenimento del proprio tempo.

>>> Nel caso di un potenziale fallimento di qualsiasi singolo componente, corrispondente ad un messaggio abbandonato o un processore fallito, saranno i protocolli a proteggere il sistema dagli errori individuali, garantendo che il lavoro verrà svolto comunque.

Tutte queste proprietà dei sistemi distribuiti derivano direttamente dalla comprensione del ruolo dei nodi presenti in questo sistema.

SISTEMA DISTRIBUITO - FACCIAMO UN ESEMPIO:


Il grafico, mostra un classico problema di esempio dai sistemi distribuiti, in cui è presente una disposizione dispari di nodi ( 5 "0" e 4 "1" ).

Immaginiamo che ogni nodo inizi casualmente con uno di due valori: 0 o 1,

viene a crearsi un problema di consenso binario, in quanto vi sono solo due possibili input per ogni nodo e solo due possibili output per l'intera rete.

 L'obiettivo è, attraverso messaggi e calcoli, restituire il valore di maggioranza tra tutti i nodi.

Da un punto di vista prettamente intuitivo possiamo dire che la risposta di questo sistema è 0 visto che ci sono 5 ZERI e solo 4 UNO.

Prima di iniziare a considerare il processo esatto con cui questo sistema può raggiungere la risposta,
chiediamoci :

    Cosa stiamo cercando esattamente in questo sistema?
    Quali proprietà vogliamo sostenere?
    Cosa costituisce una risposta corretta?

Grazie a Leslie Lamport ricercatore di sistemi distribuiti, possiamo dimostrare formalmente la correttezza di un sistema distribuito, attraverso l'utilizzo di questo semplice, quanto fondamentale grafico .



In buona sostanza Lamport afferma che un sistema è corretto se due situazioni sono vere.

Approfondimenti QUI--->

https://it.wikipedia.org/wiki/Leslie_Lamport
https://pdfs.semanticscholar.org/2b98/33f7edd1ca8b32e3510980519dfb06aa0d38.pdf

In termini formali parliamo di SICUREZZA e VIVACITA'.  In particolare le proprietà di SICUREZZA si riferiscono a cose che non accadranno mai, mentre la VIVACITA' ( LIVENESS )  si riferiscono alle cose che alla fine succederanno  restituendo un valore di maggioranza.

Si noterà certamente che le proprietà di sicurezza e vividezza sono difficili da soddisfare contemporaneamente, nel senso che soddisfare l'una significa " allontanarsi " irrimediabilmente dalla soddisfazione dell'altra.

Per fare un esempio fatti mentalmente il caso relativamente alla tua vita reale: vivere la tua vita nel modo più sicuro possibile sarebbe rimanere dentro la tua bella stannzetta tutto il giorno e non parlare mai con nessuno.  Niente ti potrebbe accadere, è vero, ma perchè nulla stai facendo. Oppure, al contrario potresti vivere una vita piena di attività ed imprevisti otttenendo comunque lo stesso risultato.

Ma cosa significa esattamente ?
Quali tipi di risultati vogliamo e quali no?

--> Se il nostro obiettivo è quello di restituire un valore di maggioranza ( rispetto all'esempio di sopra ), non vorremmo mai un programma che restituisca un valore che non è il valore di maggioranza.

* Ma come applicare le idee di sicurezza e vivacità in un sistema distribuito?
* Come possiamo dimostrare che il nostro sistema raggiunge il suo obiettivo?

Affinchè  un sistema distribuito si comporti in modo corretto, sappiamo che deve venire in qualche modo soddisfatto un consenso sulla risposta corretta.

In buona sostanza ...

Dato un sistema distribuito, è necessario che si raggiunga in qualche modo un consenso sulla risposta corretta.

Dati alcuni input, i nodi devono concordare l'output. I nomi dati a queste procedure di consenso sono noti come algoritmi di consenso.

Possiamo mettere algoritmi di consenso nel contesto della sicurezza o della vita reale, stabilendo condizioni su cosa deve accadere, e cosa non può accadere, perchè un sistema arrivi al consenso.

Grazie all'informatica i requisiti di qualsiasi algoritmo di consenso corretto sono TRE e per la precisione validità, accordo e risoluzione.

>>> VALIDITA'

Qualsiasi valore deciso dalla rete deve essere proposto da uno dei processi. In altre parole, l'algoritmo di consenso non può concordare arbitrariamente su alcun risultato. Non può essere codificato per esempio per restituire sempre il valore 0.

>>> ACCORDO 


 Pero', se se ogni nodo ha iniziato con 1 e stiamo cercando il valore di maggioranza, 0 non ha significato. Accordo significa che tutti i processi non difettosi devono  concordare sullo stesso valore. Significa che tutti i processi non difettosi devono concordare sullo stesso valore.

>>> RISOLUZIONE

Significa che tutti i nodi non difettosi alla fine decideranno su qualche valore. In altre parole, il sistema deve alla fine restituire un valore; il risultato non può essere sospeso per sempre nel limbo.

Senza la garanzia della risoluzione, non abbiamo alcuna garanzia che il consenso sarà mai raggiunto.

Comprendendo questi tre elementi essenziali di un algoritmo di consenso, si puo' iniziare ad intuire cosa serve a qualsiasi sistema distribuito per arrivare al consenso.

MA SE CI DOVESSERO ESSERE DELLE incongruenze nei nostri risultati, allora

Quale è vero ( risultato ) ?
Quale è corretto ( risultato )  ?

In questo senso Affinché il risultato sia significativo, tutti i processi funzionanti devono concordare su di esso.

---> RIASSUNTO in breve 

In sostanza VALIDITA' E ACCORDO sono proprietà di sicurezza, specificano cose che non possono mai accadere in un sistema che giunge correttamente al consenso e facendo in modo che i nodi onesti non decidano mai in modo triviale o casuale.

Senza la garanzia della RISOLUZIONE pero', non abbiamo alcuna garanzia che il CONSENSO sarà mai raggiunto.

Comprendendo questi tre elementi essenziali di un algoritmo di consenso, si capisce cosa serve a qualsiasi sistema distribuito per arrivare al consenso.

PROBLEMA DI ESEMPIO

Il problema del consenso distribuito consiste nel far sì che alcuni processi convengano su un valore, MA dopo che almeno uno di essi ha effettuato una proposta riguardo tale valore.

Esempio con tre processi:


i processi p1 e p3 propongono di procedere ad un’azione comune;

il  processo p3 propone di abortire l’azione comune, ma poi subisce un crash.

A questo punto un algoritmo di consenso distribuito fa sì che i due processi corretti decidano di procedere.

REQUISITI

I requisiti da soddisfare da parte dell' algoritmo di consenso distribuito in ogni sua esecuzione sono:

VALIDITA'
ACCORDO
RISOLUZIONE

RISORSE
https://lamport.azurewebsites.net/pubs/time-clocks.pdf

Nota dell'autore. Se sei arrivato fino a qui, grazie ! Se vuoi supportare questo documento ( con note e / o miglioramenti ) oppure mi vuoi suggerire errori e/o omissioni, aggiunte da fare, ti invito a lasciare un commento ed una nota di miglioramento, attraverso l'apposito campo " commenti " .

Ti ringrazio.

Write By     Andrea Belvedere
Follow me. https://twitter.com/AndreaBelvedere