Cos'è l'eventuale coerenza?
L'eventuale coerenza è un modello di programmazione in cui i programmatori ipotizzano che per un periodo di tempo sufficientemente lungo e senza modifiche a un sistema, l'attuale versione di un determinato programma finirà per distribuire fino a quando ogni replica del programma non sarà coerente. Il concetto di eventuale coerenza 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 si ottiene attraverso un processo in tre fasi. Innanzitutto, le informazioni distribuite sono rese disponibili sul sistema; questo è seguito da uno stato soft, in cui diversi utenti potrebbero ancora lavorare con diverse versioni 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 riguarda gli aggiornamenti software distribuiti online. Per i primi secondi dopo il rilascio di un aggiornamento, nessuno lo avrà; non è trascorso abbastanza tempo per gli utenti del software per scaricare e installare l'aggiornamento. Questo è lo stato "disponibile"; l'aggiornamento esiste, ma deve ancora essere distribuito. Nel tempo, mentre gli utenti scaricano l'aggiornamento, alcuni lo avranno e altri no. Dopo che è trascorso abbastanza tempo, tutti coloro che usano il software saranno aggiornati all'ultima versione. Questa è la premessa alla base dello stato di eventuale coerenza: dato il tempo sufficiente, qualsiasi aggiornamento si propagherà completamente in tutto il sistema.
Man mano che il sistema lavora per un'eventuale coerenza, i conflitti sono inevitabili. Questi si verificano quando la versione del programma o le informazioni attualmente sul computer non corrispondono alla "versione del modello" del programma. I programmi sono di solito 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 richiede di solito 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 allineano la versione del programma o i dati con il modello coerente. La differenza chiave tra queste ha a che fare con il modo in cui il sistema cronometra l'operazione di riparazione. Tutte queste operazioni presentano 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. Ciò ripara l'incoerenza, portando il programma o i dati in linea con il modello, ma rallenta temporaneamente anche 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 ha luogo quando non si verifica alcuna operazione di lettura o scrittura, portando al consumo di cicli di inattività sulla CPU.