Andmete sünkroniseerimine

Allikas: Lambda

Ehk, kui

  • mitmel eri arvutil peab olema kõigil ühesugune andmehulk (failide, andmebaasi vms kujul)
  • seda andmehulka pidevalt muudetakse (lisatakse midagi, muudetakse olemasolevat jms)

siis kuidas tagada, et muutused

  • üldse jõuavad kõikidesse arvutitesse,
  • jõuavad sinna üheaegselt?

Selle probleemi teevad keeruliseks mitu asja:

  • Andmete edasisaatmise kanal võib vahel rikki minna.
  • Andmed võivad edasisaatmisel kanalis saada kogemata või meelega muudetud.
  • Mõnes arvutis võib olla vigane programm, mis ei suuda teiste arvutitega adekvaatselt infot vahetada.
  • Mõnes arvutis võib olla pahatahtlik programm, mis saadab meelega eksitavat infot.
  • jne.

Kogu see sünkroniseerimise probleem on üks suuri arvutiteaduse ja praktilise tarkvara-ehituse suuri teemasid: vaata wikipediast consensus. Illustreerimiseks kasutatakse tihti bütsantsi kindralite probleemi, mille lihtsaim juhtum kahe kindrali probleem on üldjuhul põhimõtteliselt mittelahenduv: ehk, garantiid konsensuseks ei saagi olla. Teisalt, kui nõudeid veidi lõdvendada ja kindraleid on rohkem, saame ehitada erinevaid algoritme (vaata bütsantsliku vea wikit, mis annavad küllalt OK tõenäosusega garantiid sünkroonsuseks. Huvi korral vaata klassikalist artiklit sellel teemal.


Erinevad rakenduse tüübid fokuseeruvad eri stsenaariumitele / eri osadele probleemist.Näiteks,

  • P2P süsteemid ja spetsiifiliselt sh DHT (distributed hash tables) jaotab andmehulga mitme eri masina vahel: igaühel on mõni tükk. Põhiküsimiseks on, et kuidas leida, mis masinas on vajalik tükk?
  • Bittorrent fokuseerub küsimusele, et kui algul on andmehulk ainult ühes masinas, siis kuidas ta efektiivselt kopeerida paljudesse teistesse masinatesse.
  • Distributed ledger ja spetsiifiliselt näiteks Bitcoin fokuseerub küsimusele, et kui igas masinas on kõik andmed, aga tehakse sagedasi täiendusi andmehulka, siis kuidas need täiendused jõuaksid kõigi masinateni ja kuidas masinate vahel hoida konsensust, et andmehulk on tõesti kõigil sama.
  • Hajutatud andmebaasid tegelevad nii P2P tüüpi kui Distributed ledgeri tüüpi probleemidega: andmed tuleb mitme masina vahel ära jagada, aga kuidas jagada ja kuidas neid süngis hoida?