Cíle architektury databázových serverů
Architektura databázového serveru určuje, jak systém při zpracování dat dosahuje konzistence, dostupnosti, škálovatelnosti, výkonu a bezpečnosti. Zahrnuje návrh paměťových struktur a úložiště, plánování dotazů, řízení souběhu, transakční protokolování, mechanismy replikace a distribuce, správu zdrojů a provozní observabilitu. Správná architektura minimalizuje latenci, maximalizuje propustnost a zajišťuje předvídatelné SLA napříč workloady OLTP, OLAP i HTAP.
Logická a fyzická architektura
- Logická vrstva: datový model (relace, dokumenty, klíč–hodnota, graf), transakční sémantika (ACID), rozhraní (SQL/JSON/Gremlin), bezpečnostní politika.
- Fyzická vrstva: paměťové struktury (buffer pool, sloupcová cache), formát souborů (řádkový/sloupcový), protokol WAL, indexy, plánovač vláken, plánovač I/O a replikace.
Procesní model a plánování vláken
- Proces pro každé spojení vs. vlákno pro každé spojení: jednoduché řešení, které však při vysoké souběžnosti vyžaduje mnoho přepnutí kontextu.
- Událostmi řízené/asynchronní I/O (proaktory): sdílená vlákna, epoll/kqueue/IOCP, vhodné pro desítky tisíc spojení.
- Plánovač úloh s přebíráním práce: fronty úloh, přiřazení vláken k uzlům NUMA, minimalizace kontence zámků.
Paměťová architektura: buffer pool, cache a NUMA
- Buffer pool: stránkově orientovaná cache datových a indexových stránek; strategie LRU/clock, ochrana často používaných stránek, oddělené seznamy čistých/změněných stránek.
- Cache redo/undo logu: buffer před synchronizací WAL, group commit snižující režii operace fsync.
- Alokace s ohledem na NUMA: lokální paměť u patice CPU, rozdělené hashovací tabulky a latche pro snížení latence mezi paticemi.
Úložiště: formáty stránek a organizace dat
- Řádkové úložiště (row store): vhodné pro OLTP, přístup k celým řádkům, indexované přístupy.
- Sloupcové úložiště (column store): OLAP, vektorové skenování, komprese (RLE, slovníková, bit-pack), pozdní materializace.
- Hybridní/HTAP: architektura Delta-main, vrstvy LSM pro příjem dat a sloupcové snímky pro analytiku.
- Stránky a extent: pevná velikost (4–32 KB), mapa volného místa, fill factor, heap vs. seskupený index.
Indexy a zrychlení přístupu
- B+-stromy: standard pro OLTP; workloady s převahou zápisů na konec řeší štěpení stránek, zápis předem a zmírnění problémů s často používanými listovými stránkami.
- Hashovací indexy: průměrná složitost O(1), nevhodné pro rozsahové dotazy; často se používají v paměti.
- Vektorové/sloupcové indexy: zóny min/max, Bloomovy filtry, zónové mapy.
- LSM stromy: sekvenční zápisy, memtable → SSTable → slučování; vhodné pro úlohy s převahou zápisů a logově strukturovaná úložiště.
- Specializované indexy: GiST/R-Tree (prostorová data), GIN (fulltext), invertované indexy (dokumentové databáze), bitmapové indexy (OLAP).
Transakce, WAL a zotavení
- ACID: atomicita (undo/kompenzace), konzistence (omezení, triggery), izolace (plánování konfliktů), trvalost (WAL).
- WAL (Write-Ahead Logging): nejprve zapsat redo záznam do logu na trvalé médium a poté zapsat stránku do datového souboru; group commit, čísla pořadí záznamů v logu.
- Kontrolní body: pravidelné zapisování změněných stránek na disk, zkrácení obnovy; fuzzy checkpointing minimalizuje pozastavení celého systému.
- Obnova: analýza → redo → undo, přírůstkový restart bezpečný při pádu, logické dekódování pro CDC.
Řízení souběhu: zámky, latche a MVCC
- Zámky: S/X, zámky záměrů (IS/IX/SIX), granularita (řádek, stránka, tabulka), detekce zablokování a graf čekání.
- MVCC: verzování řádků, izolace pomocí snímků, čtenáři neblokují zapisující; úklid starých verzí (vacuum, TTL, epochy).
- Latche/zámky: krátkodobá ochrana struktur v paměti (uzlů B+-stromu); liší se od transakčních zámků.
- Úrovně izolace: Read Uncommitted, Read Committed, Repeatable Read, Serializable (optimistická validace, SSI).
Zpracování dotazů: optimalizátor a exekuční engine
- Optimalizátor: přepis pomocí pravidel (posunutí predikátů, ořezání projekce), nákladový model (kardinalita, selektivita), výběr plánu (pořadí spojování, typy spojení, přístup přes index vs. úplné skenování).
- Exekuce: iteratorový model Volcano vs. vektorové dávkové zpracování; SIMD, pozdní materializace, adaptivní výběr operátorů.
- Spojení: vnořené smyčky, hash join (build/probe, odložení na disk), sort-merge; adaptivní přepínání podle statistik a zpětné vazby za běhu.
Komprese, kódování a šifrování
- Komprese: slovníková, RLE, delta, bit-pack; snížení I/O a zvýšení míry zásahů do cache v OLAP.
- Šifrování uložených dat: TDE s klíči pro jednotlivé tabulky nebo stránky, integrace se systémem KMS a rotací klíčů.
- Šifrování při přenosu: TLS, mTLS pro replikaci i klientská spojení.
Vysoká dostupnost: replikace a přepnutí při selhání
- Fyzická replikace: přenos bloků/WAL, synchronní vs. asynchronní replikace; potvrzování zápisu kvórem snižuje RPO.
- Logická replikace/CDC: změny na úrovni řádků/operací, selektivní publikování, následné transformace.
- Přepnutí při selhání: automatické, s volbou lídra (Raft/Paxos); prevence rozdělení mozku (STONITH, fencing), povýšení uzlu s ohledem na zpoždění replikace.
Škálování: scale-up, scale-out a disagregace
- Scale-up: více CPU/RAM/NVMe; optimalizace NUMA, přiřazení vláken k CPU, paralelní I/O fronty.
- Scale-out (shared-nothing): horizontální dělení dat (sharding) pomocí konzistentního hashování, směrování podle rozsahu či adresáře, lokální transakce a dvoufázový commit napříč shardy.
- Shared-disk: více serverů využívajících jedno úložiště; vyžaduje koherenci cache (DLM) a fencing.
- Disagregované úložiště/výpočet: výpočetní uzly bezpečně připojené k objektovému úložišti (S3, HDFS), lokální cache, víceúrovňové úložiště.
Rozdělování dat a jejich lokalita
- Horizontální dělení: podle rozsahu/hash/list; společné dělení pro lokální spojení, prořezávání pro selektivní dotazy.
- Vertikální dělení: oddělení širokých sloupců, rozdělení na často a zřídka používaná data, archivace.
- Vrstvení úložiště: NVMe (hot), SSD (warm), objektové úložiště (cold) s pravidly pro migraci stránek.
Distribuované transakce a konzistence
- 2PC/3PC: koordinátor, příprava/potvrzení, zaznamenání rozhodnutí; latence a blokování při selhání.
- Konsenzus (Raft/Paxos): replikovaný stavový automat, lineárně uspořádané zápisy, volba lídra.
- Vzor Saga: posloupnost lokálních transakcí s kompenzačními kroky pro eventual konzistenci v architektuře mikroslužeb.
- CAP: kompromisy mezi konzistencí a dostupností při poruchách síťového rozdělení; volba CP vs. AP podle domény.
HTAP a architektury pracující v paměti
- OLTP v paměti: struktury bez zámků, optimistické řízení souběhu, dotazy kompilované do nativního kódu.
- HTAP: sdílené úložiště s architekturou Delta-main, sloupcový doprovodný modul a replikace změn téměř v reálném čase pro analytiku bez extrakce dat.
- Akcelerátory: SIMD, GPU (skenování/spojení), XDP/RDMA pro replikaci s nízkou latencí.
Provoz: observabilita, ladění a řízení zdrojů
- Telemetrie: metriky (latence p99, propustnost, míra zásahů do cache, doba kontrolního bodu), logy (strukturované), trasování (OpenTelemetry).
- Profilování dotazů: EXPLAIN/EXPLAIN ANALYZE, statistiky plánů, detekce regresí plánů.
- Řízení zdrojů: správa workloadů, cgroups, kvóty CPU/RAM/IOPS, správce dotazů a řízení přijímání požadavků.
Zálohování, snímky a obnova po havárii
- Online zálohy: hot snímky zajišťující konzistenci prostřednictvím WAL; přírůstkové zálohy a katalog verzí.
- Obnova k určitému okamžiku (PITR): kombinace úplné zálohy a logů s časovým bodem obnovy; testy obnovy jako součást cvičení obnovy po havárii.
- Geografická obnova po havárii: asynchronní replikace, RPO zohledňující zpoždění replikace, pravidelné testy přepnutí při selhání.
Bezpečnost, víceuživatelskost a audit
- Autentizace a autorizace: RBAC/ABAC, zabezpečení na úrovni řádků/sloupců, oprávnění definer/invoker.
- Audit: nedestruktivní zaznamenávání změn DDL/DML, integrace se SIEM, detekce anomálií.
- Víceuživatelské prostředí: schémata vs. instance vs. cluster; izolace od hlučných sousedů, fondy zdrojů.
Síť a I/O: latence, propustnost, protokoly
- Protokoly: binární (minimální režie), multiplexování, ukončení TLS; keep-alive a sdružování spojení zkracují latenci navazování spojení.
- Zásobník I/O: asynchronní AIO/io_uring, jmenné prostory NVMe, slučování zápisů, disciplína fsync, přímé I/O u datových souborů.
Cloudové a serverless architektury
- Oddělený výpočet a úložiště: elastické clustery nad objektovým úložištěm, vrstvy cache, automatické pozastavení/obnovení.
- Serverless databáze: automatické škálování, účtování po malých jednotkách, latence s limity napříč více tenanty a zmírnění prodlevy při studeném startu pomocí trvalých fondů.
- Dodržování předpisů a suverenita: šifrování, používání vlastního klíče, umístění dat, audit souladu.
Modelování schématu a dopady na architekturu
- Normalizace vs. denormalizace: OLTP upřednostňuje 3NF, OLAP hvězdicové/sněhové schéma; dopady na indexování a strategie spojování.
- Časovost: tabulky verzované systémem, bitemporální modely, cestování časem pro audit a analytiku.
- Doménová omezení: omezení CHECK, triggery, referenční integrita vs. vynucování na úrovni aplikace.
Typické topologie nasazení
| Topologie | Popis | Výhody | Rizika/limity |
|---|---|---|---|
| Jedna instance | Jeden server s replikací úložiště (RAID) | Jednoduchost, nízké celkové náklady na vlastnictví | Omezená vysoká dostupnost, škálování pouze vertikálně |
| Primární uzel–repliky | Primární uzel, 1–N replik (synchronních/asynchronních) | Čtení z replik, rychlé přepnutí při selhání | Zpoždění replikace, složitější konzistence při zápisu |
| Více primárních uzlů | Více uzlů umožňujících zápis (s řešením konfliktů nebo bez něj) | Horizontální škálování zápisů | Konflikty, potřeba modelů bez konfliktů (CRDT) |
| Sharded cluster | Data dělená podle klíče, směrovací vrstva | Lineární škálování | Rebalancování, transakce napříč shardy |
Osvědčené postupy návrhu a provozu
- Pro analytiku využívejte vektorový exekuční engine a sloupcové formáty; u OLTP minimalizujte latenci v kritické transakční sekci.
- Dimenzujte propustnost WAL (NVMe, slučování zápisů) a používejte group commit.
- Aktivně spravujte statistiky a histogramy pro optimalizátor; monitorujte regrese plánů.
- Navrhněte WLM (správu workloadů) a řízení přijímání požadavků k ochraně OLTP před náročnými dotazy.
- Automatizujte zálohování a PITR a provádějte pravidelné testy obnovy po havárii.
- Zajistěte zabezpečení jako výchozí nastavení: šifrování, minimální oprávnění, audit, pravidelnou rotaci klíčů a certifikátů.
Závěr
Moderní architektura databázových serverů je výsledkem kompromisu mezi přísnou transakční konzistencí, vysokou dostupností a škálovatelností. Klíčem je volba vhodného datového modelu, správná fyzická organizace dat a indexů, robustní WAL a MVCC, promyšlená replikace a dělení dat a důsledná observabilita a bezpečnost. Kombinací těchto principů lze dosáhnout předvídatelného výkonu a odolnosti napříč scénáři OLTP, OLAP i HTAP, a to v lokálních i cloudových prostředích.
