Wat is uiteindelijke consistentie?
Eventuele consistentie is een programmeermodel waarin programmeurs ervan uitgaan dat de huidige versie van een bepaald programma gedurende een voldoende lange periode en zonder wijzigingen aan een systeem zal worden gedistribueerd totdat elke replica van het programma consistent is. Het concept van uiteindelijke consistentie wordt gebruikt in programmeermethoden zoals optimistische replicatie, gedistribueerd gedeeld geheugen en gedistribueerde transacties. Wat databases betreft, wordt de uiteindelijke consistentie bereikt via een proces in drie stappen. Eerst wordt de gedistribueerde informatie op het systeem beschikbaar gesteld; dit wordt gevolgd door een zachte status, waarin verschillende gebruikers mogelijk nog met verschillende versies van de gegevens werken; en uiteindelijk wordt consistentie bereikt en hebben alle computers toegang tot identieke gegevens.
Een van de meest zichtbare manieren waarop uiteindelijke consistentie wordt toegepast, heeft te maken met software-updates die online worden verspreid. De eerste paar seconden nadat een update is uitgebracht, heeft niemand deze meer; er is onvoldoende tijd verstreken voor gebruikers van de software om de update te downloaden en te installeren. Dit is de "beschikbare" status; de update bestaat, maar moet nog worden gedistribueerd. Naarmate gebruikers de update downloaden, zullen sommigen na verloop van tijd de update hebben en anderen niet. Na voldoende tijd is echter iedereen die de software gebruikt, bijgewerkt naar de nieuwste versie. Dit is het uitgangspunt van de staat van uiteindelijke consistentie: bij voldoende tijd zal elke update zich volledig door het systeem verspreiden.
Omdat het systeem werkt aan uiteindelijke consistentie, zijn conflicten onvermijdelijk. Deze treden op wanneer de programmaversie of informatie die momenteel op de computer staat niet overeenkomt met de "modelversie" van het programma. Programma's zijn meestal opgezet om dergelijke conflicten te herkennen en te beheren. Wanneer de bestanden op een specifieke computer ouder zijn dan de nieuwste modelversie van de software of gegevens in kwestie, zal het systeem de gebruiker meestal vragen een update te starten om het verschil op te lossen.
Drie mogelijke methoden zijn beschikbaar om deze resoluties te effectueren: schrijfreparatie, leesreparatie en asynchrone reparatie. Deze methoden brengen allemaal de versie van het programma of de gegevens in overeenstemming met het consistente model. Het belangrijkste verschil tussen deze heeft te maken met de manier waarop het systeem de reparatie uitvoert. Al dergelijke operaties hebben voordelen en nadelen.
Bij een schrijfreparatie worden wijzigingen in de code die op de computer zijn opgeslagen tijdens een schrijfbewerking aangebracht, wanneer de computer al iets naar de harde schijf van het systeem schrijft. Dit herstelt de inconsistentie, waardoor het programma of de gegevens in overeenstemming zijn met het model, maar het vertraagt ook tijdelijk de oorspronkelijke schrijfbewerking. Voor een leesreparatie vindt de corrigerende bewerking plaats tijdens een leescyclus vanaf de harde schijf. Dit vertraagt op zijn beurt de leesbewerking. Bij asynchrone reparatie vindt de reparatie plaats wanneer er geen lees- of schrijfbewerking plaatsvindt, wat leidt tot het verbruik van inactieve cycli op de CPU.