Zálohování stále se měnících velkých dat

Re:Zálohování stále se měnících velkých dat
« Odpověď #15 kdy: 15. 01. 2025, 14:19:16 »
Jde-li konkrétně o banky.

Ono to řešení není tak složité, složité je jen v detailech. Ukázkový příklad, Oracle DB nad replikovaným diskovým polem, replikovaný transakční log, na vstupu se každý požadavek ukládá do auditního logu. Transakce se nejprve uloží do interní fronty a poté se provedou změny v modelu. Vše se striktně spouští v db transakci.

To co tzv. Core (či Core banking system, CBS). Je to databáze a k tomu rozhraní, které se stará o transakce, klienty, účty, účetnictví, číselníky atd. Na Core databázi se zpravidla nikdo z venku (ani aplikace) nepřipojuje, vše se replikuje přes transakční log, který se čte. Core bývá fyzicky, síťově a administračně oddělen od zbytku infrastruktury.

České banky mají Core velký zpravidla několik TB velký, RTO se pohybuje v hodinách. Při obnově se zahodí datová složka, vezme se poslední snapshot/checkpoint a od něho se aplikují jednotlivé transakce z logu (jedna po druhé). To už psali předřečníci.

Naše banky mají zpravidla dvě aktivní lokality, kam se data rovnou replikují. Transakční a auditní logy z core putují na pásky se zpožděním pár desítek minut.

Vedle toho pak nezávislé stojí jiné databáze a datové sklady, které data dále zpracovávají, posílají, zobrazují klientům v bankovnictví, dělají reporty a výstupy do ČNB atd. Aplikací a systémů nad Corem pak může být i několik stovek a to jsou pak systémy, s kterými se potkávají běžní lidé a zaměstnanci. Často ale neobsahují primární data a mohu je obnovit z Core systému. Tam se data zálohují už daleko jednodušejí, snaphosty virtuálů, dumpy dat a vesměs to je věcí týmu, kterému to patří, aby udělal backup and restore implementaci. Obnova se čvičí několikrát ročně a některé banky to mají již plně zautomatizované.

Technicky se ale nedá zabránit všem druhům útoků, důležitou roli hraje dohledový tým a automatizace, která izoluje v případě problémů celé systémy, dohledové centrum funguje nonstop. Díky vysokému tlaku ČNB, jsou naše banky v tomhle hodně progresivní. To už se ale nedá říct o těch systémech nad tím, s kterými se větčina vývojářů a uživatelů setkává.

Kdyby někoho zajímal rozsah, v jednom z Corů vidím třeba 2 000 tabulek a celkově obsahují 300 000 sloupců. K transakcím se ukládají i atributy a metadata, tj. z jakých terminálů transakce vznikla, různé identifikace a seriová čísla, IP adresy, časové známky, podpisy atd. atd.


RDa

  • *****
  • 2 824
    • Zobrazit profil
    • E-mail
Re:Zálohování stále se měnících velkých dat
« Odpověď #16 kdy: 15. 01. 2025, 15:06:29 »
Kdyby někoho zajímal rozsah, v jednom z Corů vidím třeba 2 000 tabulek a celkově obsahují 300 000 sloupců.

A pouziva se to prakticky vse, nebo je to spis dusledek nasazeni nakoupene technologie, ktera byla vytvorena nebo dokonvergovala do univerzalniho reseni, aby zadna zmena schematu v teto casti uz nikdy nebyla potreba (coz rozhodne usnadnuje aktualizace a snizuje moznosti problemu, kdyz jsou vse pouze data a samotna struktura se nemeni).

Nebo je tam i nejaka segmentace dat (sam jsem pouzival ve vykonnem vyhledavaci), to pak pocet klidne narust muze libovolne, a usnadnuje to pak paralelizaci, ono jeden stroj s naivnim schematem databaze bude mit chte nechte sve limity.

Re:Zálohování stále se měnících velkých dat
« Odpověď #17 kdy: 15. 01. 2025, 16:31:48 »
V bankach je podla mna transakcia mala (predpokladam 10-ky bajtov).
Ohledně 10-tek bajtů bych byl dost opatrný, určitě to spíše bodou 100-ky, ne li 1000. Ono na transakci není jenom odkud jak a kolik, ale budou tam třeba různé symboly, měna, popis příkazce, popis příjmence. Nedejbože, aby ta transakce byla kartou nebo mezinárodní, to pak přibude spousta dalších atributů.
Jinak taková banka má transakcí miliony denně.

Dobre, ale furt su to len nejake znaky (pismena, cisla + nealfanumericke znaky). Aj keby to netrepali do databazy, tak v textakoch to nezabara vela. Samozrejme pri milionoch transakcii je tych dat viac.
A představovat-si, že data katastru jsou xml se souřadnicemi je podle mě také naivní. To kde parcely jsou je jenom malá část dat. Katastr hlavně vede majitele, celé zástavní smlouvy. Podle mě český eviduje i celé kupní smlouvy. Různé omezení o manilupaci - zástavní smlouvy,...
Samozrejme, ze mapy nie su vsetko, ale ide o to co vsekto potrebuju na katastri udrziavat. Mozno to robia sposobom, ze si zmluvy a podobne dokumenty skenuju, ukladaju do png, alebo pdf a potom pre jedneho zakaznika vytvoria aj 100 MB.

Zaujmal ma pricip backupu, kde sa hodne casto zapisuju do DB data. Neslo mi ani tak o velkost dat, ale velmi caste frekvenciie zapisov

Re:Zálohování stále se měnících velkých dat
« Odpověď #18 kdy: 15. 01. 2025, 16:57:07 »
Kdyby někoho zajímal rozsah, v jednom z Corů vidím třeba 2 000 tabulek a celkově obsahují 300 000 sloupců.

A pouziva se to prakticky vse, nebo je to spis dusledek nasazeni nakoupene technologie, ktera byla vytvorena nebo dokonvergovala do univerzalniho reseni, aby zadna zmena schematu v teto casti uz nikdy nebyla potreba (coz rozhodne usnadnuje aktualizace a snizuje moznosti problemu, kdyz jsou vse pouze data a samotna struktura se nemeni).

Nebo je tam i nejaka segmentace dat (sam jsem pouzival ve vykonnem vyhledavaci), to pak pocet klidne narust muze libovolne, a usnadnuje to pak paralelizaci, ono jeden stroj s naivnim schematem databaze bude mit chte nechte sve limity.

ty data jsou normalizovaná a modelovaná, s validací, datovými typy a vše co si přeješ, dělá se i migrace schémat a dat za provozu. Dokud vše bylo věcí mainframů, byly běžné noční odstávky, kde se dělala údržba, validace. Dnes se přechází na 24/7 provoz, často to běží na věcech jako Oracle Exadata a už potkáš u kubernetes v core infrastruktuře (koukám na to trochu nelibě, ale co).

Zpravidla je core výsledkem dodávky jedné společnosti, partnera nebo vlastní in-house vývoj, nebývá to mišmaš všeho, co koupíš, to jsou až ty vrstvy nad tím. Je tam hodně číselníků, třeba třetina. Každá banka to má jiné, když jsme migrovalii data při slučování bank, tak to jsou tisíce člověkodnů jenom na to, abys ty data propojil a spároval, ikdyž na druhé straně logicky musí být hodně podobné.

Ty systémy jsou rozsáhlé, protože i rozsah služeb a funkcí je vysoký. Třeba PSD2, to jsou desítky nových tabulek jen kvůli tomuhle. Změny se dělají pořád a příprava nových věcí se děje denně, nasazování je pak dána jen tím, jak to má banka vnitřně nastavené, některá je schopná změny dělat skoro denně, jiná si to nechá do velkého balíčku jednou za půl roku. Core nemusí být složen fyzicky z jediné databáze, ale častěji to je soustava několika databází a segmentuje se to.

Jsem architekt, do provozních dat tolik nevidím a ani mě nezajímají, zajímá mě jen jak to je postavené, navrhnuté a jak s tím dál. Stejně tak nemohu sdělovat příliš konkrétní data, protože nevím, co je zveřejnitelné a co ne. Zagoogli si, jestli tě to více zajímá, např. z Komerční banky o tom veřejně mluví Frantisek Kubala.

Zaujmal ma pricip backupu, kde sa hodne casto zapisuju do DB data. Neslo mi ani tak o velkost dat, ale velmi caste frekvenciie zapisov

Zálohují a schraňují se transakční logy, tj. záznam o tom, že proběhla nějaká změna v databázi (insert, update, změna schémat). Počet transakcí jen ovlivňuje to, jak je transakční log velký, jsou to append-only soubory. Stav v databázi je pak až materializace právě těch jednotlivých transakcí, hodně zápisu ti nevadí, vždy máš nějaký point in time (transaction id), ty jsou seřazeny v čase.

jjrsk

  • *****
  • 628
    • Zobrazit profil
Re:Zálohování stále se měnících velkých dat
« Odpověď #19 kdy: 15. 01. 2025, 17:53:57 »
...potom pre jedneho zakaznika vytvoria aj 100 MB....
Ty ses opravdu velkej naivista, to ti nebude stacit ani na kadibudku. Stavebni urady kterych je katastr soucasti bezne pracuji s GB per jeden projekt.

Zaujmal ma pricip backupu, kde sa hodne casto zapisuju do DB data. Neslo mi ani tak o velkost dat, ale velmi caste frekvenciie zapisov
To je jen otazka vykonu a funkce penez. Proste kdyz mas na vstupu Gbit ... musis zvladat ten Gbit i odesilat. Pokud to nedelas kontinuelne ale jednou za cas, tak pochopitelne nasobne vic.

A pokud bys presah moznosti HW, coz se muze stat, tak proste musis ten provoz rozdelit na vice stroju. Zadna raketova veda.



RDa

  • *****
  • 2 824
    • Zobrazit profil
    • E-mail
Re:Zálohování stále se měnících velkých dat
« Odpověď #20 kdy: 15. 01. 2025, 22:18:15 »
Jsem architekt, do provozních dat tolik nevidím a ani mě nezajímají, zajímá mě jen jak to je postavené, navrhnuté a jak s tím dál. Stejně tak nemohu sdělovat příliš konkrétní data, protože nevím, co je zveřejnitelné a co ne. Zagoogli si, jestli tě to více zajímá, např. z Komerční banky o tom veřejně mluví Frantisek Kubala.

Tak zajima me to prave z architektonickeho hlediska, protoze pripravuji prepsani sveho erp/ucetnictvi (inhouse reseni). At to je cely vlastne primarne insert-only (writeonly, append), a modify se dela jen nad pomocnymi tabulkami pro aktualni stav (primarne z toho duvodu aby to bylo zivy a synchronni ve dvou lokacich). Nejvetsi hruza je ale ze zmen schematu - doposud na te "primitivni" db bylo vse jenom rozsirovano a pridavano, s tim ze to je pak zpetne kompatibilni (tj. nic nezmizi a ani nic nebude jinak), ale pak to casem vytvori neudrzovatelny moloch (asi hodne SAPoidni).

Tak se pidim po tom, jak resit tyhle veci (tj. nejake procesni pristupy, at je schema synchronni s okolnimi "skripty"). Napada me takovej tick-tock pristup, kdy se prvne zmigruje okoli na pouziti obojiho a pak az data. A to jeste bych rad bezvypadkove (treba aukro me neskutecne vytaci hlaskou o odstavce.. tohle v roce 2025 by uz nemelo byt bezne/caste). Z popisu jak hodnotis sektor by me byl blizsi asi pristup vice mensich zmen, ve smyslu mala zmena = mensi sance to podelat, castejsi zmena = stane se z toho rutina, nez ten druhy obcasny s vetsimi upravami.

Re:Zálohování stále se měnících velkých dat
« Odpověď #21 kdy: Dnes v 07:41:01 »
Jinak dela se to jak tu bylo zmineno tak, ze mas treba dve primarni storage, ktery se mezi sebou replikujou. To ti resi ten prvni level (vcetne pripadne umreni storage).

Budu zcela kategoricky nesouhlasit. Replikace ti vůbec neřeší ransomwarový útok, protože napadená data se ti okamžitě replikují do sekundáru, protože samotným smyslem a účelem sekundární repliky je v reálném čase reflektovat změny v primární replice.
Replika NENÍ záloha, replika je opatření pro zajišětění vysoké dostupnosti při TECHNICKÉ ZÁVADĚ.

Z tyhle zalohy se pak v nejakych intervalech odsypavaji data jeste do archivu, kde drzis nejakou historii.

V kazdym pripade to funguje zcela automaticky a nikdo nic nikam nenosi. Jednoduse proto, ze jakejkoli lidskej faktor = nebude to fungovat.

V kazdym pripade si musis uvedomit, ze cim vic dat mas, tim vetsi problem znamena obnova backupu. Ona totiz zadna konektivita neni dostatecne nekonecna.

Další naprosto zásadní věc je správné nastavení PŘÍSTUPOVÝCH PRÁV k zálohám. Protože záloha, kterou ti napadený účet řadového uživatele může přepsat VČETNĚ ARCHIVU je v případě útoku naprosto zbytečná, protože likvidace archivu a záloh je už z principu jedním z prvních kroků, často ještě před samotným útokem na provozní data. Právě proto, aby se obnově ze zálohy zamezilo.
Proto má záloha běžet v kontextu účtu, který má právo k pouze čtení provozních dat a k pouze přidávání dat do zálohy, nikoli k jejich přepisu.

Když tohle zvořeš, uděláš líp když se na to úplně vykašleš a neuděláš to vůbec, protože aspoň ušetříš hromadu prachů A ZÁROVEŇ VÍŠ, že to je potřeba ASAP udělat pořádně.

Re:Zálohování stále se měnících velkých dat
« Odpověď #22 kdy: Dnes v 07:42:46 »
Nebudu popisovat principy zálohování, těch je všude plno. Stačí si dohledat Veeam.
Nicméně banky kdysi zálohovaly na WORM média "Write Once, Read Many", dnes existují i SD karty.

Jinak jsem si jist že banky využívají služeb AWS a produkt S3, či podobné.
Největší nebezpečí zcizení dat je totiž ve vlastních zainteresovaných zaměstnancích, než v cizích datacentrech kde jsou data zašifrovaná.

Jenže tady nejde o primárně krádež informací, nýbrž o jejich zničení / odepření přístupu k nim.
Každé se to řeší jinak, protože jiné jsou cíle jak útočníka, tak organizace.

Re:Zálohování stále se měnících velkých dat
« Odpověď #23 kdy: Dnes v 12:29:55 »
Tak zajima me to prave z architektonickeho hlediska, protoze pripravuji prepsani sveho erp/ucetnictvi (inhouse reseni). At to je cely vlastne primarne insert-only (writeonly, append), a modify se dela jen nad pomocnymi tabulkami pro aktualni stav (primarne z toho duvodu aby to bylo zivy a synchronni ve dvou lokacich). Nejvetsi hruza je ale ze zmen schematu - doposud na te "primitivni" db bylo vse jenom rozsirovano a pridavano, s tim ze to je pak zpetne kompatibilni (tj. nic nezmizi a ani nic nebude jinak), ale pak to casem vytvori neudrzovatelny moloch (asi hodne SAPoidni).

Tak se pidim po tom, jak resit tyhle veci (tj. nejake procesni pristupy, at je schema synchronni s okolnimi "skripty"). Napada me takovej tick-tock pristup, kdy se prvne zmigruje okoli na pouziti obojiho a pak az data. A to jeste bych rad bezvypadkove (treba aukro me neskutecne vytaci hlaskou o odstavce.. tohle v roce 2025 by uz nemelo byt bezne/caste). Z popisu jak hodnotis sektor by me byl blizsi asi pristup vice mensich zmen, ve smyslu mala zmena = mensi sance to podelat, castejsi zmena = stane se z toho rutina, nez ten druhy obcasny s vetsimi upravami.

Udělej mezi tím rozhraní, pohledy, marty, jinou databázi.

Přistup k schématu a databázi jako k vlastnictví. Každé scéma vlastní konkrétní aplikace a nikdo jiný než daná aplikace dané schéma nepoužívá. Pokud potřebuješ data sdílet mezi aplikacemi, exportuj data jako veřejný, stabilní, zaručený interface (ať už formou materializovaných pohledů nebo replikaci do jiné databáze nebo použití nějaké rpc nebo fronty), pak máš prostor, kde můžeš ošetřovat zpětnou kompatilibitu, verzovat či řídit změny bez ohledu na to, jak s schématy zachází její vlastník.

To, jestli jedna aplikace bude celý ERP nebo tam budeš mít jednotlivé služby je na tobě, vždy se při určité velikosti vyplatí to logicky rozdělit.

A pokud jde o řízení změn u konzumentů dat, tak hodně záleží na tom, co konzument dělá. Pokud to je třeba posílač emailů, tak starého omezím pouze na původní verzi schématu a spustím nového nad novým schématem. Stará data doběhnou a nové se začnou posílat jinak.

Nebo udělám nějaký bridge, který bude nové schéma zpětně migrovat do starého, aby původní aplikace plně fungovala beze změn. Tohle je třeba v případě bank častý způsob. Navenek nic není vidět. Až aplikace se upraví, změní se jí link na nové schéma a bude ho konzumovat přímo.

Základem je ale pořád mít nějakou vrstvu, která bude fungovat jako mezičlánek, výstup z té vrstvy je verzovaný interface a o vstup se právě stará majitel schématu a udržuje migrace při změnách. Na začátku třeba začínáš tím, že máš pohledy typu select *, protože nepotřebuješ nic jiného dělat.

Pokud jde o zápis, platí pravidlo výše, pouze jedna aplikace jako vlastník může do schématu zapisovat, ostatní nikoliv, takže na vše mít RPC nebo frontu změn a ty si bude sama aplikace odbavovat, jen ta ví, jaké je správné schéma. Varianta, kdy všichni zapisují do jedné společné databáze, jak je běžně vidět u webových aplikací vede pouze a jen k celkovým odstávkách při aktualizaci.

Pokud jde o bezvýpadkovou aktualizaci a migraci schémat. Buď máš potřebnou obslužnou logiku implementovanou v aplikaci a v jednu dobu zapisuje a čte z dvou různých verzí schémat, což je někdy dost komplikované nebo používáš materializované pohledy a migrace na úrovni databáze, aplikace pak má najednou k dispozici obě verze schémat, nové i staré a může postupně přejít na nové.

Občas se dostaneš do situace, kdy změnu potřebuješ udělat daleko rozsáhlejší, použij verzování route a směruj staré požadavky na starou aplikaci a nové požadavky na novou a v jednu dobu budeš provozovat dvě verze backendu, data z nich sdružovat právě v nějakých martech, veřejných interfaces.

Cest je ale hodně, tohle je jen takové postrčení jak to můžeš řešit. Vše zmíněné zvládne pg, s mariadb nepočítej. Pokud se vzhlédneš v moderních nosql databázích, budeš si to muset nějak implementovat sám.

jjrsk

  • *****
  • 628
    • Zobrazit profil
Re:Zálohování stále se měnících velkých dat
« Odpověď #24 kdy: Dnes v 16:03:17 »
Udělej mezi tím rozhraní, pohledy, marty, jinou databázi.
Tohle ti nebude tak uplne fungovat. Mam bezne pod spravou aplikace do kterych dodavaji moduly ruzni dodavatele. Ten modul ma samozrejme primy pristup k databazi, kde ma typicky nejake sve tabulky, ale zaroven pouziva ty "systemove".

Kazdy API pak ma nejaky svoje omezeni, a ne vzdy lze pres API zrealizovat to, co chces. A naopak, pokud udelas "neomezene" API, narazis na presne stejny problem.

Jakykoli udrzovani kompatability pak vede k presne tomu, co zminil RDa ... neudrzovatelny brajgl.

Priklad. Soudruzi kdysi davno vytvorili policko DIC a pridali ho k zaznamu organizace. Jenze pak se zjistilo, ze jedna oganizace muze mit ruzna DIC v ruznych casovych obdobich ... a tak pridali vazbu. Jenze to puvodni policko uz pouzivalo spoustu dalsich funcionalit, tak ho tam nechali. A voiala, neudrzovatelny bragl je na svete. V zavislosti na tom z kery strany do toho bordelaku vlezes se mozna vyplni jedna nebo druha nebo obe moznosti. A vysledek je ten, ze klildne na ruznych dokladech mas ruzna DIC.

Pokud bys chtel zaridit co pises, tak mas jedine dve varianty. Bud mas 100% pod kontrolou vyvoj vseho co se vsim nejak komunikuje a muzes rozkazem zaridit prislusne zmeny, nebo to proste postavis tak, ze te nejaka kompatabilita nepali, a at se kazdej postara jak umi.

Ono totiz i verzovani API povede k tomu, ze proc by sme to menili, kdyz to funguje. Takze ve vysledku budes mit desitky nebo stovky verzi API ktery budes muset udrzovat, pokud jim to nechces rozbit.



Re:Zálohování stále se měnících velkých dat
« Odpověď #25 kdy: Dnes v 16:44:58 »
Pokud to je modul, je to pořád součástí té aplikace, ne?

Chceš mít schopnost dělat aktualizace bez výpadků a nasazovat změny průběžně? Prostě zapomeň na to, že do jedné databáze zapisuje více samostatných aplikací. Z cizích databází čti pouze z veřejných schémat, přes api nebo odbírej event log. Jedna databáze = jeden vlastník = jeden zapisovatel a cokoliv jiného řeš replikacemi, migracemi, transformacemi. Samozřejmě to je zjednodušení.

Argumentuješ správně, když více dodavatelů používá stejné schéma a databázi, změny musíš koordinovat napříč dodavateli a nasazovat to najednou. To je pak nepořádek, to nikdy nezautomatizuješ.

Neber to absolutně. Urči si kritickou část systémů, kterou máš pod kontrolou, tam zaveď a vynuť nějaká pravidla, aby se ti žilo lépe. V dalších vrstvách můžeš stavidla uvolnit. Banky mají svůj Core, který udržují takhle náročně a přesně, ono se jim to vyplatí, ale pak mají třeba systém na vykazování práce, což je běžná databáze někde v kubernetu, přistupuje do ní několik dalších aplikací vč. koupených pluginů, udržuje to několik týmů, zálohuje se to celé najednou, aktualizace znamená výpadek a restart, s tím se dá žít, uděláš to mimo pracovní dobu, na konci měsíce z toho uděláš report do účetnictví a ten skončí v Core vrstvě.

Musíš si určit co chceš a co ne. Je na tobě, co pustíš do infrastruktury a jaká pravidla musí co splnit. s NIS2 se nám objeví ve spoustě firem povinnost si zmapovat, který systém je jak důležitý pro chod firmy a jak pro nás je bolestný výpadek, tohle ti přesně udělá ten řez. Pokud bez té aplikace nemůžeš ani otevřít dveře, těžko jí můžeš provozovat stylem, že X aplikací od X dodavatelů zapisuje do stejné databáze a aktualizují si schémata jak se jim zachce. Rozumíš kam s tím mířím?

Pokud někdo chce udělat z např. Pohody (pohoda.cz) kritický systém a řekne mi, že tady má webovou aplikaci, která přímo přistupuje do databáze, další která používá api, má tady několik koupených pluginů a třetí strana to aktualizuje sama každý půl rok. Řeknu mu, že bez rozbití těch integrace a jejich oddělení a normalizování datové vrstvy s tím moc neudělám (viz třeba co vše musel udělat AK system, aby měl pohodu distribuovanou). Pak přesně přichází na řadu diskuze, jestli je levnější to předělat nebo koupit flexibilnější účetní systém.