Che cos’è l’eventuale coerenza?

La consistenza finale è un modello di programmazione in cui i programmatori assumono che in un periodo di tempo sufficientemente lungo e senza modifiche a un sistema, la versione corrente di un particolare programma verrà distribuita fino a quando ogni replica del programma non sarà coerente. Il concetto di consistenza finale viene utilizzato nei metodi di programmazione come la replica ottimistica, la memoria condivisa distribuita e le transazioni distribuite. Per quanto riguarda i database, l’eventuale coerenza viene raggiunta attraverso un processo in tre fasi. Innanzitutto, le informazioni distribuite vengono rese disponibili sul sistema; questo è seguito da uno stato soft, in cui diversi utenti potrebbero ancora lavorare con versioni diverse dei dati; e infine si ottiene la coerenza e tutti i computer hanno accesso a dati identici.

Uno dei modi più visibili in cui viene applicata l’eventuale coerenza ha a che fare con gli aggiornamenti software distribuiti online. Per i primi secondi dopo il rilascio di un aggiornamento, nessuno lo avrà; non è trascorso abbastanza tempo per consentire agli utenti del software di scaricare e installare l’aggiornamento. Questo è lo stato “disponibile”; l’aggiornamento esiste, ma deve ancora essere distribuito. Nel tempo, man mano che gli utenti scaricano l’aggiornamento, alcuni lo avranno e altri no. Tuttavia, dopo che è trascorso abbastanza tempo, tutti coloro che utilizzano il software verranno aggiornati all’ultima versione. Questa è la premessa alla base dello stato di eventuale consistenza: dato un tempo sufficiente, qualsiasi aggiornamento si propagherà completamente in tutto il sistema.

Mentre il sistema lavora verso la coerenza finale, i conflitti sono inevitabili. Questi si verificano quando la versione del programma o le informazioni attualmente sul computer non corrispondono alla “versione modello” del programma. I programmi sono generalmente impostati per riconoscere tali conflitti e gestirli. Quando i file su un computer specifico sono più vecchi dell’ultima versione del modello del software o dei dati in questione, il sistema di solito richiede all’utente di avviare un aggiornamento per risolvere la disparità.

Sono disponibili tre metodi possibili per effettuare queste risoluzioni: riparazione in scrittura, riparazione in lettura e riparazione asincrona. Tutti questi metodi portano la versione del programma o dei dati in linea con il modello coerente. La differenza fondamentale tra questi ha a che fare con il modo in cui il sistema cronometra l’operazione di riparazione. Tutte queste operazioni hanno vantaggi e svantaggi.

In una riparazione in scrittura, le modifiche al codice memorizzato sul computer vengono apportate durante un’operazione di scrittura, quando il computer sta già scrivendo qualcosa sul disco rigido del sistema. Questo ripara l’incoerenza, portando il programma oi dati in linea con il modello, ma rallenta anche temporaneamente l’operazione di scrittura originale. Per una riparazione in lettura, l’operazione correttiva si verifica durante un ciclo di lettura dal disco rigido. Questo, a sua volta, rallenta l’operazione di lettura. Nella riparazione asincrona, la riparazione avviene quando non si verifica né un’operazione di lettura né di scrittura, portando al consumo di cicli di inattività sulla CPU.