Ciao, e benvenuto nella settima puntata della settantunesima stagione. Nelle scorse puntate abbiamo visto un desiderio ripresentarsi di continuo: dati sempre coerenti dappertutto, e allo stesso tempo un sistema sempre disponibile che non dice mai di no. Oggi mettiamo quel desiderio davanti a un muro. Perché esiste un risultato, semplice e spietato, che dice una cosa scomoda: quando le cose vanno male, non puoi avere tutto. Devi scegliere. E capire questa scelta è forse la lezione più importante della materia.
Partiamo dai tre desideri, perché sono tutti ragionevoli, presi uno a uno. Primo: vuoi coerenza, cioè che chiunque legga un dato, da qualunque macchina, veda sempre lo stesso valore aggiornato. Secondo: vuoi disponibilità, cioè che il sistema risponda sempre, che non rimandi mai indietro chi chiede. Terzo: c'è la realtà, cioè il fatto che la rete, prima o poi, si spezzerà, lasciando due gruppi di macchine incapaci di parlarsi. I primi due sono desideri; il terzo non è un desiderio, è una condizione del mondo, che non puoi rifiutare. E il risultato spietato dice: quando arriva quella condizione, la spezzatura, non puoi soddisfare entrambi i primi due desideri insieme.
Vediamo perché, con l'esempio più concreto possibile. La linea tra le filiali di Roma e Milano si è tagliata. Arriva un cliente a Roma e chiede di modificare un dato che riguarda anche Milano. Roma si trova davanti a un bivio, e sono le uniche due strade possibili. Prima strada: Roma accetta la richiesta e va avanti da sola. Il cliente è servito, il sistema resta disponibile, ma ora Roma e Milano hanno dati diversi, e la coerenza è saltata. Seconda strada: Roma rifiuta, dice al cliente aspetta, non posso decidere senza sentire Milano. La coerenza è salva, nessun dato divergente, ma il sistema ha detto di no, la disponibilità è saltata. Non c'è una terza porta. Mentre la linea è tagliata, o sei disponibile e incoerente, o sei coerente e non disponibile.
Nota che questo non è un difetto degli ingegneri pigri, è una legge, come la gravità. Puoi rileggere il ragionamento quante volte vuoi: se le due filiali non possono parlarsi, e una riceve una richiesta, deve o rispondere da sola, rischiando di divergere, o tacere, rinunciando a servire. Non esiste un modo furbo di essere insieme coerenti e disponibili quando il filo è tagliato, perché essere coerenti richiede di sentire l'altra parte, e proprio quello è ciò che la spezzatura impedisce. È il teorema che porta le iniziali delle tre cose in gioco, e lo trovi per esteso nei materiali.
Vediamo come questa scelta guida i sistemi veri, perché la fanno davvero, ogni giorno. Un sistema bancario, di fronte a una spezzatura, sceglie quasi sempre la coerenza: preferisce bloccare un'operazione piuttosto che rischiare due prelievi sullo stesso conto. Meglio dire di no che sbagliare i conti. Un social network, invece, di fronte alla stessa spezzatura sceglie quasi sempre la disponibilità: preferisce mostrarti dati un po' vecchi piuttosto che darti una pagina bianca. Meglio un like contato male che un servizio giù. Non è che uno dei due sbagli: hanno solo priorità diverse, perché il costo dell'errore è diverso nei due mondi.
C'è un dettaglio onesto da aggiungere, che completa il quadro. Questa scelta durissima vale solo mentre la rete è spezzata, che per fortuna è raro. Nella vita normale, quando tutto comunica, puoi avere sia coerenza sia disponibilità: la tensione scompare. Ma c'è un secondo compromesso più silenzioso che vale sempre, anche quando la rete è sana: più insisti perché tutte le copie siano perfettamente coerenti, più le fai aspettare l'una con l'altra, e quindi più lento diventa il sistema. Quindi non paghi la coerenza solo nei disastri: la paghi ogni giorno, un po', in velocità. Coerenza e prontezza tirano sempre in direzioni opposte.
Voglio lasciarti con il modo giusto di usare questa legge, perché non è motivo di sconforto ma uno strumento di progettazione. Di fronte a ogni pezzo del tuo sistema, poniti la domanda cruda: se adesso la rete si spezzasse, cosa preferirei, dire una cosa forse sbagliata o non dire niente? La risposta cambia da dato a dato. Per il saldo di un conto sceglierai il silenzio prudente; per il numero di visualizzazioni di un video sceglierai la risposta pronta anche se imperfetta. Progettare bene un sistema distribuito vuol dire fare questa scelta consapevolmente, dato per dato, invece di scoprirla per caso il giorno del disastro. La legge non ti toglie la libertà: ti costringe solo a scegliere con gli occhi aperti.
Per oggi ci fermiamo qui. Abbiamo incontrato la legge più dura della materia. Tre cose in gioco: la coerenza, dati uguali ovunque; la disponibilità, rispondere sempre; e la spezzatura della rete, che non è un desiderio ma una condizione inevitabile. Il risultato spietato dice che, mentre la rete è spezzata, coerenza e disponibilità non possono coesistere: o servi rischiando di divergere, o resti coerente ma dici di no. Non c'è terza porta, ed è una legge, non una pigrizia. I sistemi veri scelgono secondo il costo dell'errore: le banche la coerenza, i social la disponibilità. E c'è un prezzo silenzioso della coerenza in velocità, anche a rete sana. Nella prossima puntata: dividere per scalare. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.