GoSuda

Databázový server a Vložená databáza

By gosunuts
views ...

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.