GoSuda

Database servery a Embedded databáze

By gosunuts
views ...

Databázový server

Databázový server znamená databázi, která je spouštěna jako nezávislý serverový proces a zpracovává požadavky aplikace prostřednictvím sítě. Většina RDBMS, které nám jsou známy, jako jsou MySQL, PostgreSQL, Oracle DB, odpovídá tomuto modelu. Databázový server má následující výhody:

  • Centralizovaná správa: Data jsou integrovaně spravována na jednom místě, což usnadňuje konzistenci, bezpečnost, zálohování a obnovu.
  • Nezávislost zdrojů: Je mu přidělen vlastní CPU, paměť a úložiště, což zajišťuje stabilní výkon bez ohledu na stav aplikace.
  • Vysoká souběžnost a škálovatelnost: Je optimalizován pro souběžný přístup mnoha uživatelů a horizontální škálování prostřednictvím clusterování nebo replikace je relativně snadné.

Díky těmto vlastnostem se databázový server stal v průběhu desetiletí standardem softwarové infrastruktury. Avšak s technologickým pokrokem a změnami prostředí se v některých prostředích začaly projevovat nevýhody databázového serveru a jako alternativa k němu se opět dostává do popředí embedded databáze.

Nový trend: Embedded databáze

Embedded databáze je databázový engine, který je součástí aplikace jako knihovna a běží ve stejném procesu, bez samostatného serverového procesu. Typickými embedded databázemi jsou SQLite, LevelDB, RocksDB. Následují důvody, proč se tyto embedded databáze staly silnou alternativou v nejnovějším technologickém prostředí:

  • Nástup SSD

    V minulosti, v prostředí zaměřeném na HDD, se výkon náhodného přístupu výrazně zhoršoval ve srovnání s výkonem sekvenčního čtení/zápisu dat. Proto bylo klíčem k optimalizaci výkonu minimalizace I/O disku a maximalizace cache paměti. Databázové servery se tomu přizpůsobily a překonaly fyzická omezení HDD provozováním rozsáhlých cache a zpracováním operací zápisu hromadně.

    Avšak nástup SSD zcela změnil tento předpoklad. SSD jsou tisíckrát rychlejší v náhodném I/O výkonu než HDD a mají výrazně kratší latenci. V důsledku toho zmizelo předchozí vnímání, že "I/O disku je největší úzké místo", a naopak se začalo projevovat zpoždění vznikající při vzdáleném přístupu k DB serveru přes síť jako nové úzké místo.

  • MSA a datová nezávislost

    V minulosti byla běžná struktura, kde jedna obrovská monolitická aplikace závisela na jedné centralizované databázi. Tato metoda byla jednoduchá, ale s rostoucí velikostí služby se stalo obtížné měnit datové schéma a problémem byla příliš silná vazba, kdy všechny služby sdílely stejnou DB.

    V moderní mikroservisní architektuře je pro řešení těchto problémů kladen důraz na princip "Database per Service". Zajištěna je nezávislost mezi službami tím, že každá služba vlastní a zapouzdřuje své vlastní dedikované úložiště dat, což usnadňuje izolaci chyb a škálování. V tomto procesu se embedded DB stává ideální volbou pro datové úložiště na úrovni služby. Je lehká, rychlá a může být nasazena společně s kódem služby, což se velmi dobře hodí k prostředí MSA.

    Například v prostředí Kubernetes se široce používá metoda optimalizace lokálního zpracování dat umístěním embedded DB vedle kontejneru aplikace pomocí Sidecar patternu. To má za následek snížení síťového úzkého místa a minimalizaci zpoždění přístupu k datům.

  • Zjednodušení provozního prostředí

    Databázový server vyžaduje složité provozní postupy, jako je instalace, patchování, zálohování, obnova po havárii, replikace, monitorování výkonu, a pro to je nezbytný specializovaný DBA a odborný provozní personál. Zejména ve velkých prostředích je tato zátěž správy velmi vysoká.

    Embedded DB tyto problémy výrazně zmírňuje. Pokud je databáze integrována do aplikace, unit testy, build, správa verzí, nasazení probíhají společně, takže není nutný samostatný provoz serveru. Navíc, když se aplikace škáluje (Scale-out), embedded DB se také škáluje a je možné automatizované řízení prostřednictvím kultury DevOps a CI/CD pipeline. Zejména ve start-upech, malých službách a prostředích pro vývoj prototypů embedded databáze výrazně snižuje provozní složitost a výrazně urychluje vývoj a nasazení.

  • Vývoj vysoce výkonných systémových jazyků a ekosystémů

    V minulosti bylo běžné, že databáze a aplikace byly psány v různých jazycích. Například databázové enginy vyžadující vysoký výkon byly primárně psány v C, C++, a aplikace byly vyvíjeny v jazycích jako Java, Python, PHP. Tato metoda byla efektivní pro optimalizaci výkonu, ale měla omezení, jako jsou problémy se stabilitou paměti, složité zpracování souběžnosti, latence a obtížnost integrace a nasazení knihoven.

    Avšak s nástupem moderních systémových programovacích jazyků, jako jsou Go a Rust, se tato omezení výrazně zmírnila. Zejména Go je vhodný pro psaní vysoce výkonných aplikací, stejně jako nízkoúrovňových programů, jako jsou databázové enginy, což umožňuje zpracovávat databáze a aplikace společně v rámci jednoho jazykového ekosystému.

    V Golangu se aktivně používají vysoce výkonné embedded databáze, jako jsou BadgerDB a PebbleDB. To znamená, že embedded databáze se stává důležitou volbou s vlastní konkurenceschopností, přesahující pouhou lehkou alternativu k databázovým serverům.

Závěr

Pro podmínky vyžadující centrální správu velkých dat, komplexní transakce a vysokou souběžnost je databázový server stále nejsilnějším řešením. Avšak pro jednotlivé služby v prostředí MSA, IoT edge zařízení, rychlé prototypování a projekty, kde je důležitá provozní efektivita, může být embedded databáze efektivnější a rozumnější volbou. Nakonec je důležité vybrat optimální nástroj, který nejlépe odpovídá dané situaci a požadavkům, a vývoj embedded databází nám poskytuje širší a rozmanitější možnosti volby.