Index denníkaDockup / poznámka z terénu
Note / point-in-time-recovery-vs-snapshots

Obnova k určitému bodu v čase vs snapshoty: Čo stratíte

Obnova k určitému bodu v čase vs snapshoty sa v konečnom dôsledku týka jedného čísla: koľko dát si môžete dovoliť stratiť. Zistite, čo znamená RPO, kedy stačia nočné snapshoty a kedy potichu nestačia.

Niekto o 16:15 spustí DELETE bez klauzuly WHERE. Najnovšia záloha je z 03:00. Všetko medzi týmito dvoma časmi je preč a žiadna obnova to už nevráti.

Táto medzera má názov — cieľ bodu obnovy, alebo RPO — a rozhodnutie medzi obnovou k určitému bodu v čase a snapshotmi je úplne o tom, akú veľkú ju ste ochotní akceptovať.

Dva modely

Snapshoty zachytávajú stav dát v určitom okamihu. Spúšťajú sa podľa plánu, zvyčajne každú noc. Obnovením snapshotu sa vrátite presne do stavu, v akom boli dáta v čase jeho vytvorenia, a všetko po tomto okamihu sa stratí.

Obnova k určitému bodu v čase kombinuje základnú zálohu s nepretržitým prúdom write-ahead logu databázy. Keďže každá zmena sa zaznamenáva v poradí, môžete ju prehrať do ľubovoľného okamihu pokrytého uchovávaným logom — vrátane 16:14, teda minútu pred vymazaním.

Rozdiel nie je postupný. Je to rozdiel medzi „stratili sme deň“ a „stratili sme minútu“.

Číslo, ktoré rozhoduje

Položte si jednu otázku a odpovedzte na ňu úprimne: čo sa stane, ak stratíte všetko, čo bolo zapísané za posledných dvanásť hodín?

Pri osobnom projekte, dokumentačnom webe alebo internom nástroji, ktorého dáta sa dajú znovu vytvoriť, sa toho veľa nestane. Nočné snapshoty sú v takom prípade naozaj správnou voľbou a platiť za nepretržitú archiváciu by bolo plytvanie.

Pri čomkoľvek, do čoho zapisujú zákazníci, odpoveď zvyčajne znie nejako takto: „Budeme musieť ľuďom napísať e-mail a vysvetliť im to.“ Objednávky, ktoré už neexistujú. Nahrané súbory, ktoré zmizli. Správy, ktoré boli odoslané, no teraz tam nie sú. Už samotné náklady na podporu zvyčajne prevýšia ročný rozdiel v nákladoch na infraštruktúru.

Chybou nie je vybrať si snapshoty. Chybou je vybrať si ich predvolene bez toho, aby ste sa niekedy zamysleli nad tým, koľko by stála dvanásťhodinová medzera.

Na čo sú snapshoty naozaj dobré

Nie sú menejcenným riešením. Pokrývajú zlyhania, ktoré PITR nepokrýva:

  • Úplná strata disku. Snapshot na oddelenom úložisku obnoví všetko vrátane súborov, ktoré databáza nevlastní.
  • Rýchly, hrubozrnný rollback. Vrátenie pokazenej migrácie v stagingovom prostredí je zo snapshotu rýchlejšie než prehrávanie logu.
  • Cena. Uloženie jednej kópie denne je lacnejšie než ukladanie každého zápisu.
  • Jednoduchosť. Menší počet pohyblivých častí je skutočnou prevádzkovou výhodou, najmä pre malý tím.

Problém nastáva vtedy, keď ich považujete za dostatočné pre databázu, do ktorej sa neustále zapisuje.

Čo vás stojí PITR

Nie je zadarmo a tieto náklady treba pomenovať:

  • Úložisko. Uchovávate základnú zálohu aj každý zápis za celé retenčné obdobie.
  • Komplexnosť. Archivácia musí fungovať nepretržite. Archiver, ktorý týždeň potichu zlyháva, znamená, že obnoviteľné obdobie sa končí pred týždňom — preto je monitorovanie archívu rovnako dôležité ako jeho konfigurácia.
  • Čas obnovy. Prehrávanie logu trvá dlhšie než obnovenie snapshotu. RPO sa zlepší, no RTO sa zvyčajne zhorší.

Práve tento kompromis ľudí často zaskočí. PITR znamená, že stratíte menej dát, nie že budete rýchlejšie opäť online.

Vrstvené riešenie, ktoré väčšina tímov skutočne potrebuje

V praxi nejde o voľbu medzi dvoma možnosťami. Produkčné databázy zvyčajne potrebujú tri vrstvy, pretože zlyhávajú tromi rôznymi spôsobmi:

Snapshoty, každý deň, uchovávané týždeň alebo dva. Lacné poistenie proti strate stroja. Pokrýva aj súbory, ktoré nie sú v databáze, ale nachádzajú sa na tom istom volume.

Logické dumpy, každý deň, uložené mimo hostiteľa. pg_dump je prenosný a zo svojej podstaty konzistentný. Obnoví sa na inú major verziu, u iného poskytovateľa alebo na notebook — presne to potrebujete, keď je problém v platforme, nie v dátach.

Nepretržitá archivácia, keď databáza obsahuje údaje zákazníkov. Vrstva, ktorá zmení „stratili sme dnešok“ na „stratili sme minútu“.

Každá vrstva pokrýva to, čo ostatné nepokrývajú. Snapshot vám nepomôže prejsť k inému poskytovateľovi. Logický dump vám nepomôže obnoviť súbor, ktorý nebol v databáze. Ani jedno vám nepomôže vrátiť späť vymazanie spred štyroch hodín.

Kde je Dockup

Dockup vám poskytuje dve vrstvy, ktoré pokrývajú najčastejšie zlyhania, pričom stojí za to presne si povedať, ktoré to sú.

Snapshoty volume, vytvorené na požiadanie alebo podľa plánu s počtom uchovávaných kópií:

dockup volume snapshot <volumeId> my-project/my-api
dockup volume schedule <volumeId> my-project/my-api --daily --retention 7
dockup volume restore <volumeId> <snapshotId> my-project/my-api

Logické zálohy databázy, streamované priamo do object storage a šifrované počas prenosu:

dockup db backup my-project/main-db --json
dockup db backups my-project/main-db --json

Pri obnove sú pri druhej možnosti dôležité dve vlastnosti. Záloha sa nikdy neuloží na hostiteľovi databázy — streamuje sa do úložiska priamo pri vytváraní pomocou pg_dump, takže nezdieľa osud disku, z ktorého pochádza. A dump, ktorý skončí s nenulovým kódom alebo vytvorí nulový počet bajtov, sa vymaže a zaznamená ako neúspešný, namiesto toho, aby zostal v zozname a vyzeral ako záloha.

Nepretržitú archiváciu za vás Dockup dnes nespúšťa. Ak vaše RPO skutočne musí byť v rozsahu minút, mali by ste to vedieť ešte pred výberom riešenia. Je úplne rozumné prevádzkovať ju samostatne voči spravovanej databáze a platformu používať na všetko ostatné.

Cvičenie, ktoré sa oplatí urobiť tento týždeň

Zapíšte si dve čísla týkajúce sa produkčnej databázy:

  1. RPO — koľko dát môžete stratiť. Meria sa v čase.
  2. RTO — ako dlho môžete byť mimo prevádzky. Aj to sa meria v čase.

Potom overte, čo vaše súčasné nastavenie skutočne poskytuje — obnovením niečoho. Ak sa čísla, ktoré ste si zapísali, líšia od toho, čo vaše nastavenie dokáže zabezpečiť, našli ste rozhodnutie, ktoré treba urobiť v čase, keď nič nehorí — a to je jediný vhodný čas na jeho prijatie.

Často kladené otázky

Aký je rozdiel medzi RPO a RTO? RPO určuje, koľko dát stratíte — ide o medzeru medzi posledným obnoviteľným okamihom a zlyhaním. RTO určuje, ako dlho trvá obnova. Snapshoty poskytujú veľké RPO a krátke RTO; PITR to obracia.

Môžem z nočného snapshotu obnoviť riadky vymazané pred hodinou? Nie. Snapshot obnoví stav v okamihu, keď bol vytvorený. Čokoľvek zapísané neskôr v ňom nie je. Obnova ľubovoľného okamihu vyžaduje nepretržitú archiváciu.

Je snapshot volume to isté ako záloha databázy? Nie. Snapshot zachytáva disk vrátane prípadného stavu, v ktorom sa databáza práve nachádzala uprostred zápisu. Logický dump je interne konzistentný a prenosný medzi rôznymi verziami a poskytovateľmi. Väčšina produkčných nastavení potrebuje oboje.

Ako dlho by som mal uchovávať zálohy? Dostatočne dlho na to, aby ste si všimli problém. Poškodenie alebo chybnú migráciu často odhalíte až po niekoľkých dňoch, takže jednodňová retencia často znamená, že jediné zálohy, ktoré máte, už obsahujú poškodenie.