Ciao, e benvenuto nella sesta puntata della settantunesima stagione. Nelle scorse puntate abbiamo accumulato brutte notizie: la rete mente, il tempo si frantuma, i guasti sono ambigui, le copie divergono. Sembra impossibile far fare qualcosa di sensato a un gruppo di macchine. Eppure i sistemi distribuiti funzionano, ogni giorno, per miliardi di persone. Come? Grazie all'idea al centro di tutta la disciplina, quella che tiene insieme il resto: riuscire, nonostante tutto, a mettersi d'accordo.
Partiamo dal capire perché l'accordo serve così spesso, perché è dappertutto. Le macchine devono concordare su un mucchio di cose. Chi è il capo che prende le decisioni? Questa transazione è andata a buon fine, sì o no? Qual è il prossimo evento da registrare, e in quale ordine? Ogni volta che più macchine devono comportarsi come se fossero una sola, devono prima accordarsi su un unico valore comune, e non basta che lo sappiano in due o tre: devono deciderlo in modo che nessuno, dopo, possa più contraddirlo. Questo problema, che sembra amministrativo, è in realtà il più profondo di tutti.
Vediamo perché è così difficile, con la storia che spiega tutto: quella dei due generali. Due eserciti alleati sono su due colline, con il nemico nella valle in mezzo. Devono attaccare esattamente nello stesso momento: se attaccano insieme vincono, se attacca uno solo perde. L'unico modo di parlarsi è mandare un messaggero attraverso la valle, dove può essere catturato. Il primo generale manda un messaggio: attacchiamo all'alba. Ma non può sapere se è arrivato. Allora il secondo manda una conferma. Ma nemmeno lui sa se la conferma è arrivata. Serve una conferma della conferma, e poi una conferma di quella, all'infinito. Non si raggiunge mai la certezza perfetta. Con messaggi che si possono perdere, l'accordo assoluto è impossibile.
Nota bene questa impossibilità, perché è onesta e va accettata: non si può avere la certezza matematica in un solo colpo. Ma qui arriva l'ingegneria, che non cerca l'impossibile: cerca il quasi-certo, abbastanza sicuro da poterci costruire sopra. E il trucco che rende l'accordo praticabile è splendido nella sua semplicità: la maggioranza. Invece di pretendere che tutti siano d'accordo, il che è fragile, chiedi che sia d'accordo più della metà. Se la maggioranza delle macchine ha detto sì a un valore, quel valore vince, ed è ufficiale. Chi era assente, o non ha sentito, quando torna dovrà adeguarsi a ciò che la maggioranza ha già deciso.
Vediamo perché la maggioranza è un'idea così potente, perché risolve di colpo tanti problemi. Prima cosa, funziona anche se qualcuno è morto o irraggiungibile: non ti servono tutti, ti basta più della metà, quindi il sistema decide anche mentre alcune macchine tacciono. Seconda cosa, e più sottile, non possono mai esistere due maggioranze diverse per due decisioni opposte, perché due gruppi che sono entrambi più della metà per forza si sovrappongono in almeno una macchina, e quella macchina non voterebbe per due cose contrarie. La maggioranza taglia la strada al doppio comando che ci spaventava: al massimo un gruppo raggiunge la maggioranza, l'altro resta minoranza e sa di doversi fermare.
C'è un altro pezzo che rende tutto solido, ed è come le macchine ricordano ciò che hanno deciso. Ogni decisione presa viene scritta, in ordine, in una specie di registro comune, un diario condiviso che tutte cercano di tenere identico. È lo stesso spirito del diario del filesystem di cui parlavamo nell'altra stagione, e degli eventi in coda che ordina un sistema di messaggi: prima si scrive cosa si è deciso, poi lo si esegue, così se una macchina cade e si riprende può rileggere il diario e rimettersi in pari con le altre. Concordare l'ordine delle voci di questo diario, riga per riga, è la forma pratica del mettersi d'accordo, e nei materiali trovi i nomi degli algoritmi che lo realizzano.
Voglio lasciarti con il modo giusto di pensare all'accordo, perché ribalta lo sconforto delle puntate scorse. È vero, la certezza perfetta è impossibile: non puoi garantire matematicamente che tutti sappiano tutto. Ma non ti serve la perfezione: ti serve che una maggioranza fidata converga su una verità comune, in modo che chi resta indietro possa sempre allinearsi. È un accordo umile, che ammette assenti e ritardatari, ma è saldo: una volta che la maggioranza ha deciso, quella decisione non si smonta più. Su questa roccia, il quasi-certo costruito con pazienza, poggia tutto ciò che nei sistemi distribuiti sembra magia.
Per oggi ci fermiamo qui. Abbiamo trovato l'idea che regge tutto: mettersi d'accordo su un unico valore comune, che si tratti di chi comanda, se una transazione è valida, o in che ordine vanno gli eventi. La storia dei due generali ci insegna che, con messaggi che si perdono, l'accordo assoluto in un colpo è impossibile. Ma l'ingegneria non cerca l'assoluto: cerca il quasi-certo, e lo ottiene con la maggioranza, chiedere il consenso di più della metà. La maggioranza decide anche se qualcuno tace, e impedisce due decisioni opposte, perché due maggioranze si sovrappongono sempre. Le decisioni si scrivono in ordine in un diario condiviso, così chi cade si rimette in pari. Nella prossima puntata: non puoi avere tutto. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.