Ce este coerența eventuală?

Consistența eventuală este un model de programare în care programatorii presupun că, pe o perioadă suficient de lungă de timp și fără modificări ale unui sistem, versiunea curentă a unui anumit program se va distribui în cele din urmă până când fiecare replică a programului este consecventă. Conceptul de consistență eventuală este utilizat în metode de programare, cum ar fi replicarea optimistă, memoria partajată distribuită și tranzacțiile distribuite. În ceea ce privește bazele de date, eventuala consistență se obține printr-un proces în trei etape. În primul rând, informațiile distribuite sunt puse la dispoziție în sistem; aceasta este urmată de o stare soft, în care diferiți utilizatori pot lucra în continuare cu diferite versiuni ale datelor; și în sfârșit se obține coerența și toate computerele au acces la date identice.

Una dintre cele mai vizibile moduri în care se aplică eventuala consistență are de-a face cu actualizările software distribuite online. În primele secunde după lansarea unei actualizări, nimeni nu o va avea; nu a trecut suficient timp pentru ca utilizatorii software-ului să descarce și să instaleze actualizarea. Aceasta este starea „disponibilă”; actualizarea există, dar încă nu a fost distribuită. În timp, pe măsură ce utilizatorii descarcă actualizarea, unii o vor avea, iar alții nu. După ce a trecut suficient timp, totuși, toți cei care utilizează software-ul se vor actualiza la cea mai recentă versiune. Aceasta este premisa din spatele stării de eventuală consistență: având suficient timp, orice actualizare se va propaga pe deplin în întregul sistem.

Pe măsură ce sistemul lucrează spre o eventuală consistență, conflictele sunt inevitabile. Acestea apar atunci când versiunea programului sau informațiile aflate în prezent pe computer nu se potrivesc cu „versiunea de model” a programului. Programele sunt de obicei configurate pentru a recunoaște astfel de conflicte și a le gestiona. Atunci când fișierele de pe un anumit computer sunt mai vechi decât cea mai recentă versiune de model a software-ului sau a datelor în cauză, sistemul va solicita de obicei utilizatorului să inițieze o actualizare pentru a rezolva disparitatea.

Sunt disponibile trei metode posibile pentru a efectua aceste rezoluții: reparație de scriere, reparare de citire și reparare asincronă. Toate aceste metode aduc versiunea programului sau a datelor în conformitate cu modelul consistent. Diferența cheie dintre acestea ține de modul în care sistemul cronometra operația de reparație. Toate astfel de operațiuni au avantaje și dezavantaje.

Într-o reparație de scriere, modificările codului stocat pe computer se fac în timpul unei operațiuni de scriere, când computerul scrie deja ceva pe hard diskul sistemului. Acest lucru repară inconsecvența, aducând programul sau datele în conformitate cu modelul, dar și încetinește temporar operația de scriere inițială. Pentru o reparație de citire, operația de corectare are loc în timpul unui ciclu de citire de pe hard disk. Aceasta, la rândul său, încetinește operația de citire. În repararea asincronă, reparația are loc atunci când nu are loc nici o operație de citire, nici de scriere, ceea ce duce la consumul de cicluri inactiv pe CPU.