Takédatabázová replikace, datová replikace, replikační procesPokročilý

Definice

Replikace je průběžné vytváření a udržování kopií dat, služeb nebo stavů na více uzlech systému. V databázích a distribuovaných aplikacích zvyšuje dostupnost, umožňuje číst z blízkých kopií a chrání provoz před výpadkem jednoho stroje, ale současně přináší zpoždění, konflikty a složitější obnovu.

Kategorie: DatabázeAktualizováno

Nezaměňujte: Replikace se v IT používá pro kopírování dat nebo stavu mezi systémy, zatímco v biologii označuje například vytváření kopie DNA.

Proč se data kopírují na více míst

Replikace řeší situaci, kdy jeden server, disk nebo region nesmí být jediným místem pravdy. Systém průběžně posílá změny do dalších uzlů, aby bylo možné pokračovat při výpadku, obsloužit čtení blíže uživateli nebo rozdělit zátěž. V databázích se často replikuje transakční log, jednotlivé operace nebo vybrané tabulky. V úložištích objektů se kopírují soubory a metadata, u aplikačních služeb může jít o stav front, cache nebo konfigurace.

Replikace není jen prosté kopírování adresáře. Důležitý je pořádek změn, potvrzování zápisů, řešení chyb a chování při přerušení spojení. Systém musí vědět, odkud má po obnově pokračovat, které změny už druhá strana přijala a zda se mezitím neobjevily dvě neslučitelné verze téhož záznamu.

Primární uzel, replika a směr zápisu

Nejběžnější model používá primární uzel pro zápisy a jednu nebo více replik pro čtení a zotavení. Primární uzel přijme transakci, zapíše ji do lokálního logu a replika změnu později přehraje. Takový návrh je srozumitelný a dobře se provozuje, ale vytváří asymetrii: při selhání primárního uzlu je nutné zvolit nového držitele zápisů.

Jiný model dovoluje zapisovat na více místech. Multi-primary replikace snižuje závislost na jednom uzlu, ale přidává konflikty. Dva uživatelé mohou změnit stejnou položku ve dvou regionech dřív, než se uzly potkají. Aplikace pak musí rozhodnout, zda vyhrává novější zápis, zda se změny sloučí, nebo zda konflikt vyžaduje ruční zásah.

Synchronní potvrzení a opožděná replika

Synchronní replikace potvrdí zápis až po doručení na další uzel. Zvyšuje jistotu, že potvrzená data přežijí výpadek jednoho stroje, ale každé potvrzení čeká na síť a druhou stranu. Asynchronní replikace odpovídá rychleji, protože primární uzel nemusí čekat na repliku. Cena se projeví jako replication lag, tedy zpoždění mezi primárním stavem a kopií.

Zpoždění repliky je běžný provozní jev, ne automaticky chyba. Problém vzniká, když aplikace po zápisu hned čte z repliky a uživatel nevidí vlastní změnu. Citlivé operace, například změna hesla nebo stav platby, proto často čtou z primárního uzlu nebo používají mechanismus, který zajistí čtení alespoň po konkrétní potvrzené změně.

Kde replikace selhává jako pojistka

Replikace chrání hlavně dostupnost, nikoli historickou obnovu. Když aplikace omylem smaže tabulku, chyba se může velmi rychle zreplikovat do všech kopií. Záloha, snapshot nebo point-in-time recovery řeší jiný problém: návrat ke staršímu stavu. Dobrá architektura proto kombinuje replikaci pro provozní odolnost a zálohování pro obnovu po lidské chybě, chybě softwaru nebo kompromitaci účtu.

Provozní riziko představuje také split-brain, kdy dvě části systému věří, že smějí přijímat zápisy. Bez správného quorum, voleb leadera nebo ruční procedury může vzniknout sada dat, kterou nejde bezpečně sloučit. Replikace proto není jen nastavení několika uzlů, ale součást návrhu konzistence, monitoringu a obnovovacích postupů.

Příklady z praxe

  1. Logická replikace objednávek

    E-shop má tabulku objednávek v PostgreSQL a potřebuje posílat změny do analytické databáze bez ručního exportu. Primární databáze publikuje změny vybrané tabulky a cílová databáze je odebírá. Analytické dotazy potom nezatěžují produkční zápisy, ale cílová kopie může být o několik sekund pozadu.

    -- primární databáze
    CREATE PUBLICATION app_pub FOR TABLE orders;
    
    -- cílová databáze
    CREATE SUBSCRIPTION app_sub
    CONNECTION 'host=primary.example dbname=shop user=repl password=secret'
    PUBLICATION app_pub;
  2. Čtení z geograficky blízké kopie

    Služba běží ve dvou regionech a čte uživatelské profily z nejbližší repliky MongoDB. Výpadek evropského uzlu přesměruje provoz do druhého regionu, takže aplikace zůstane dostupná. Uživatel ale může krátce vidět starší profilovou fotografii, pokud poslední změna ještě nedorazila do vzdálené kopie.

Časté omyly

MýtusReplikace je totéž co záloha.
Ve skutečnostiReplikace drží aktuální nebo téměř aktuální kopii, takže pomáhá hlavně s dostupností. Záloha drží obnovitelný historický stav a chrání před chybou, která se do replik také přenese.
MýtusKdyž máme tři repliky, data jsou automaticky vždy stejná.
Ve skutečnostiRepliky mohou být zpožděné, odpojené nebo v konfliktu podle zvoleného režimu. Stejný počet kopií neříká nic o tom, zda aplikace zaručuje silnou konzistenci.

Časté dotazy

Stačí replikace místo pravidelného backupu?
Replikace nestačí jako náhrada pravidelného backupu, protože replikace obvykle přenáší i nežádoucí změny. Smazaná data, poškozené záznamy nebo škodlivý zápis se mohou rychle objevit ve všech kopiích. Backup drží starší stav, ke kterému se dá vrátit. Pro kritická data se proto replikace používá společně se zálohami, snapshoty a ověřeným postupem obnovy.
Kdy dává smysl synchronní replikace?
Synchronní replikace dává smysl tam, kde je důležitější potvrzená odolnost zápisu než nejnižší latence. Typickým příkladem jsou finanční transakce, objednávky nebo evidence, u které by ztráta potvrzeného zápisu byla horší než pomalejší odpověď. Synchronní režim ale závisí na síti a dostupnosti druhého uzlu, takže může snížit propustnost nebo blokovat zápisy při poruše.
Co znamená replication lag a proč bolí uživatele?
Replication lag znamená zpoždění mezi stavem primárního uzlu a stavem repliky. Uživatel může například uložit změnu profilu, aplikace vzápětí čte z repliky a vrátí ještě starou hodnotu. Lag se řeší volbou místa čtení, monitorováním zpoždění, omezením těžkých dotazů na replikách nebo návrhem aplikace, která po citlivém zápisu čte z primárního uzlu.
Proč replikace někdy komplikuje zápisy?
Replikace komplikuje zápisy hlavně tehdy, když systém dovolí upravovat stejná data na více uzlech. Dvě změny mohou vzniknout současně a síť je doručí v jiném pořadí. Databáze nebo aplikace pak musí rozhodnout, která verze platí, případně jak změny sloučit. Čím větší geografické rozdělení a autonomie uzlů, tím důležitější je promyšlená strategie konfliktů.

Zdroje

  1. High Availability, Load Balancing, and Replication(otevře se v novém okně)PostgreSQL Global Development Group
  2. Replication(otevře se v novém okně)MongoDB, Inc.
  3. Replication(otevře se v novém okně)Redis Ltd.

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.