Databázový server a Vložená databáza
Databázový server
Databázový server označuje databázu, ktorá beží ako samostatný serverový proces a spracováva požiadavky aplikácií prostredníctvom siete. Väčšina nám známych RDBMS, ako sú MySQL, PostgreSQL, Oracle DB a iné, spadá pod tento model. Databázový server disponuje nasledujúcimi výhodami:
- Centralizovaná správa: Dáta sú integrované a spravované na jednom mieste, čo uľahčuje konzistentnosť, zabezpečenie, zálohovanie a obnovu.
- Nezávislosť zdrojov: Vyhradením vlastného CPU, pamäte a úložiska zaručuje stabilný výkon bez ohľadu na stav aplikácie.
- Vysoká súbežnosť a škálovateľnosť: Je optimalizovaný pre súbežný prístup mnohých používateľov a horizontálne škálovanie prostredníctvom klastrovania alebo replikácie je pomerne jednoduché.
Vďaka týmto vlastnostiam sa databázový server etabloval ako štandard softvérovej infraštruktúry počas ostatných desaťročí. Avšak, v dôsledku technologického pokroku a zmien v prostredí sa v niektorých scenároch začali prejavovať nevýhody databázového servera, a ako alternatíva k nemu opäť získavajú na význame zabudované databázy.
Nový trend: Zabudované databázy
Zabudovaná databáza je databázový engine, ktorý je začlenený vo forme knižnice priamo do aplikácie a beží v rámci rovnakého procesu bez potreby samostatného serverového procesu. Medzi reprezentatívne zabudované databázy patria SQLite, LevelDB a RocksDB. Dôvody, prečo sa tieto zabudované databázy vynorili ako silná alternatíva v modernom technologickom prostredí, sú nasledujúce:
Nástup SSD
V minulých systémových prostrediach zameraných na HDD bola charakteristická výrazne nižšia výkonnosť náhodného prístupu v porovnaní s výkonom sekvenčného čítania/zápisu dát. Kľúčom k optimalizácii výkonu bolo preto minimalizovať I/O disku a maximalizovať ukladanie do pamäte cache. Databázové servery prekonávali fyzické limity HDD tým, že prevádzkovali rozsiahle cache a agregovaným spôsobom spracovávali operácie zápisu.
Avšak nástup SSD túto premisu úplne zmenil. SSD sú v porovnaní s HDD tisíckrát rýchlejšie vo výkone náhodného I/O a ich latencia je taktiež revolučne kratšia. Výsledkom bolo, že pôvodné presvedčenie „diskové I/O je najväčšia prekážka“ zmizlo a namiesto toho sa ako nová prekážka začala vynárať latencia spôsobená prístupom k vzdialenému DB serveru cez sieť.
MSA a nezávislosť dát
V minulosti bola bežná štruktúra, kde jedna masívna monolitická aplikácia závisela od jednej centrálne spravovanej databázy. Tento prístup je síce jednoduchý, ale s rastom rozsahu služby sa zmenil dátový schéma na náročný na úpravy a vznikal problém nadmerne silnej väzby, keďže všetky služby zdieľali tú istú DB.
V modernej architektúre mikroslužieb (MSA) sa na riešenie týchto problémov kladie dôraz na princíp „Database per Service“. Tým, že si každá služba vlastní a zapúzdruje svoju vlastnú dátovú úložňu, je zaručená nezávislosť medzi službami a zjednodušuje sa izolácia chýb a škálovanie. V tomto procese sa zabudované DB stávajú ideálnou voľbou pre dátové úložisko na úrovni služby. Sú ľahké a rýchle a dajú sa distribuovať spolu s kódom služby, čo ich robí mimoriadne vhodnými pre prostredie MSA.
Například v prostredí Kubernetes sa často využíva metóda umiestnenia zabudovanej DB vedľa kontajnera aplikácie pomocou vzoru sidecar (sprievodný kontajner) na optimalizáciu lokálneho spracovania dát. To prináša efekt zníženia sieťových prekážok a minimalizácie latencie prístupu k dátam.
Zjednodušenie operačného prostredia
Databázový server si vyžaduje zložité operačné postupy, ako sú inštalácia, patchovanie, zálohovanie, obnova po zlyhaní, replikácia a monitorovanie výkonu, čo si vyžaduje dedikovaných DBA a odborný prevádzkový personál. Najmä v prostrediach veľkého rozsahu je táto záťaž správy mimoriadne vysoká.
Zabudované DB tieto problémy výrazne zmierňujú. Keďže je databáza integrovaná do aplikácie, testovanie jednotiek, zostavovanie, správa verzií a nasadenie prebiehajú spoločne, takže nie je potrebná prevádzka samostatného servera. Taktiež, keď aplikácia prechádza Scale-out, zabudovaná DB sa rozširuje spolu s ňou a umožňuje automatizovanú správu prostredníctvom kultúry DevOps a CI/CD pipeline. Najmä v prostrediach startupov, malých služieb a vývoja prototypov zabudovaná databáza prelomovo znižuje operačnú zložitosť a výrazne urýchľuje rýchlosť vývoja a nasadzovania.
Rozvoj ekosystémov a vysoko výkonných systémových jazykov
V minulosti bolo bežné, že databáza a aplikácia boli písané v rôznych jazykoch. Napríklad databázové enginy vyžadujúce vysoký výkon boli primárne písané v C alebo C++, zatiaľ čo aplikácie boli vyvíjané v jazykoch ako Java, Python alebo PHP. Tento prístup bol síce efektívny pre optimalizáciu výkonu, ale niesol so sebou obmedzenia v podobe problémov so stabilitou pamäte, zložitého spracovania súbežnosti, latencie a ťažkostí s integráciou a nasadením knižníc.
Nedávny vzostup moderných systémových programovacích jazykov, ako sú Go a Rust, však tieto obmedzenia značne zmiernil. Jazyk Go je obzvlášť vhodný nielen pre vysoko výkonné aplikácie, ale aj pre písanie nízkoúrovňových programov, ako sú databázové enginy, čo umožňuje spracovávať databázu a aplikáciu spoločne v rámci jedného jazykového ekosystému.
V skutočnosti sa v Golang aktívne využívajú vysoko výkonné zabudované databázy, ako sú BadgerDB a PebbleDB. To znamená, že zabudované databázy sa upevňujú ako dôležitá voľba s vlastnou konkurencieschopnosťou, a presahujú rámec púhej odľahčenej alternatívy k databázovému serveru.
Záver
V podmienkach vyžadujúcich centrálne riadenie rozsiahlych dát, komplexné transakcie a vysokú mieru súbežnosti zostáva databázový server najsilnejším riešením. Avšak pre jednotlivé služby v prostredí MSA, IoT edge zariadenia, rýchle prototypovanie a projekty, kde je dôležitá prevádzková efektívnosť, môžu byť zabudované databázy efektívnejšou a racionálnejšou voľbou. Napokon, kľúčové je vybrať si optimálny nástroj, ktorý najlepšie zodpovedá danej situácii a požiadavkám, a rozvoj zabudovaných databáz nám poskytuje širšie a rozmanitejšie možnosti.