Replikointi ( englanniksi replikointi ) on mekanismi, jolla synkronoidaan objektin useiden kopioiden sisältö (esimerkiksi tietokannan sisältö ). Replikointi on prosessi, jossa tietoja kopioidaan lähteestä toiseen (tai moniin muihin) ja päinvastoin.
Replikoinnin avulla objektin yhteen kopioon tehdyt muutokset voidaan siirtää muihin kopioihin.
Esimerkki ohjelmistoratkaisusta voi olla DRBD , lohkolaite, joka on suunniteltu rakentamaan vikasietoisia klusterijärjestelmiä käyttöjärjestelmään, jossa on Linux-ydin .
Replikointi voi olla synkronista tai asynkronista , kuten alla on kuvattu.
Synkronisen replikoinnin tapauksessa , jos tietty replika päivitetään, kaikki muut saman datan replikat on myös päivitettävä samassa tapahtumassa . Loogisesti tämä tarkoittaa, että tiedoista on vain yksi versio.
Useimmissa tuotteissa synkroninen replikointi toteutetaan laukaisuproseduureilla (ehkä piilotettu ja järjestelmän hallitsema). Synkronisella replikaatiolla on kuitenkin se haittapuoli, että se luo ylimääräisiä lisäkustannuksia kaikille tapahtumille, joissa replikoita päivitetään (lisäksi tietojen saatavuuteen voi liittyä ongelmia).
Asynkronisen replikoinnin tapauksessa yhden replikan päivitys välitetään muille jonkin ajan kuluttua, eikä samassa tapahtumassa. Siten asynkroninen replikointi aiheuttaa viiveen tai aikakatkaisun, jonka aikana yksittäiset replikat eivät välttämättä ole identtisiä (eli replikan määritelmä ei ole täysin sopiva, koska kyseessä ei ole täsmällinen ja oikea-aikaisesti luotu kopiointi).
Useimmissa tuotteissa asynkroninen replikointi toteutetaan lukemalla tapahtumaloki tai jatkuva jaettavien päivitysten jono. Asynkronisella replikaatiolla on se etu, että päivitystapahtumiin ei liity ylimääräisiä replikointikustannuksia, mikä voi olla kriittistä koko yrityksen toiminnalle ja asettaa korkeat suorituskykyvaatimukset.
Tämän järjestelmän haittoja ovat se, että tiedot voivat olla epäjohdonmukaisia (eli yhteensopimattomia käyttäjän näkökulmasta). Toisin sanoen redundanssi voi ilmetä loogisella tasolla, mikä tarkalleen ottaen tarkoittaa, että termi kontrolloitu redundanssi ei päde tässä tapauksessa.
Harkitse lyhyesti johdonmukaisuuden (tai pikemminkin epäjohdonmukaisuuden) ongelmaa. Tosiasia on, että jäljennöksistä voi tulla yhteensopimattomia tilanteiden seurauksena, joita on vaikea (tai jopa mahdoton) välttää ja joiden seurauksia on vaikea korjata.
Erityisesti ristiriitoja voi syntyä päivitysten käyttöönottojärjestyksestä. Oletetaan esimerkiksi, että tapahtuma A lisää rivin replikaan X ja sitten tapahtuma B poistaa rivin, ja oletetaan myös, että Y on X:n kopio. Jos päivitykset siirretään Y:ään, mutta lisätään replikaan Y käänteisessä järjestyksessä (esim. esimerkiksi erilaisten lähetysviiveiden vuoksi), tapahtuma B ei löydä Y:stä poistettavaa riviä eikä suorita toimintoaan, minkä jälkeen tapahtuma A lisää tämän rivin. Nettovaikutus on, että replika Y sisältää määritetyn rivin, mutta replika X ei.
Yleisesti ottaen konfliktitilanteiden eliminointi ja kopioiden johdonmukaisuuden varmistaminen ovat hyvin monimutkaisia. On huomattava, että ainakin kaupallisessa tietokannan käyttäjäyhteisössä termi replikointi on alettu tarkoittaa pääasiassa (tai jopa yksinomaan) asynkronista replikointia.
Suurin ero replikoinnin ja kopioinnin hallinnan välillä on:
Jos replikointia käytetään, yhden replikan päivitys etenee lopulta automaattisesti kaikkiin muihin.
Kopionhallintatilassa sitä vastoin ei ole tällaista automaattista päivitysten jakelua. Tietokopiot luodaan ja niitä hallitaan erä- tai taustaprosessilla, joka on ajallisesti erillinen päivitystapahtumista.
Kopioinnin hallinta on yleensä tehokkaampaa kuin replikointi, koska suuria tietomääriä voidaan kopioida kerralla. Haittoja ovat, että suurimman osan ajasta tietojen kopiot eivät ole identtisiä taustatietojen kanssa, joten käyttäjien on oltava tietoisia siitä, milloin tiedot synkronoitiin.
Tyypillisesti kopioiden hallintaa yksinkertaistaa vaatimus, että päivitykset on suoritettava jonkinlaisen ensisijaisen kopioskeeman mukaisesti.