GoSuda

Databaseservers en ingebedde databases

By gosunuts
views ...

Databaseserver

Een databaseserver verwijst naar een database die als een onafhankelijk serverproces draait en de verzoeken van applicaties via het netwerk verwerkt. De meeste RDBMS-systemen die ons bekend zijn, zoals MySQL, PostgreSQL en Oracle DB, vallen onder dit model. Een databaseserver biedt de volgende voordelen:

  • Gecentraliseerd beheer: Gegevens worden op één locatie geïntegreerd beheerd, wat consistentie, beveiliging, back-up en herstel vergemakkelijkt.
  • Onafhankelijkheid van resources: Door de toewijzing van eigen CPU, geheugen en opslag wordt stabiele prestatie gegarandeerd, ongeacht de status van de applicatie.
  • Hoge gelijktijdigheid en schaalbaarheid: Geoptimaliseerd voor gelijktijdige toegang door veel gebruikers, en horizontale schaalbaarheid via clustering of replicatie is relatief eenvoudig.

Dankzij deze kenmerken heeft de databaseserver zich de afgelopen decennia gevestigd als de standaard voor software-infrastructuur. Echter, door technologische vooruitgang en veranderingen in de omgeving zijn de nadelen van databaseservers in sommige omgevingen aan het licht gekomen, en als alternatief krijgen embedded databases opnieuw aandacht.

Nieuwe trend: Embedded database

Een embedded database is een database-engine die als een bibliotheek in een applicatie is opgenomen en binnen hetzelfde proces draait, zonder een afzonderlijk serverproces. SQLite, LevelDB en RocksDB zijn representatieve embedded databases. De achtergrond van de opkomst van deze embedded databases als een krachtig alternatief in de nieuwste technologische omgeving is als volgt:

  • De opkomst van SSD's

    In het verleden, in systeemomgevingen die gedomineerd werden door HDD's, was de willekeurige toegangsprestatie aanzienlijk lager dan de sequentiële lees-/schrijfprestatie. Daarom was het minimaliseren van disk I/O en het maximaliseren van geheugencaching cruciaal voor prestatieoptimalisatie. Databaseservers hebben zich hieraan aangepast door grootschalige caches te beheren en schrijfbewerkingen te bundelen om de fysieke beperkingen van HDD's te overwinnen.

    De opkomst van SSD's heeft deze aanname echter volledig veranderd. SSD's zijn duizenden malen sneller in willekeurige I/O-prestaties dan HDD's en hebben een aanzienlijk kortere latentie. Als gevolg hiervan is de eerdere perceptie dat "disk I/O de grootste bottleneck is" verdwenen, en is de vertraging die optreedt bij toegang tot een externe DB-server via het netwerk een nieuwe bottleneck geworden.

  • MSA en gegevensonafhankelijkheid

    Voorheen was het gebruikelijk dat één monolithische applicatie afhankelijk was van één gecentraliseerde database. Hoewel deze aanpak eenvoudig was, werden wijzigingen in het gegevensschema moeilijker naarmate de service groter werd, en ontstond het probleem van overmatige koppeling doordat alle services dezelfde DB deelden.

    In de moderne microservices-architectuur wordt het principe van "Database per Service" benadrukt om deze problemen op te lossen. Door elke service zijn eigen toegewezen gegevensopslag te laten bezitten en inkapselen, wordt de onafhankelijkheid tussen services gewaarborgd, en worden foutisolatie en schaalbaarheid vereenvoudigd. In dit proces wordt een embedded DB een ideale keuze als gegevensopslag op serviceniveau. Het is lichtgewicht, snel en kan samen met de servicecode worden geïmplementeerd, waardoor het zeer geschikt is voor een MSA-omgeving.

    In een Kubernetes-omgeving wordt bijvoorbeeld de sidecar-patroon veel gebruikt om een embedded DB naast de applicatiecontainer te plaatsen om lokale gegevensverwerking te optimaliseren. Dit vermindert netwerk-bottlenecks en minimaliseert de vertraging bij gegevenstoegang.

  • Vereenvoudiging van de operationele omgeving

    Een databaseserver vereist complexe operationele procedures zoals installatie, patching, back-up, disaster recovery, replicatie en prestatiebewaking, waarvoor dedicated DBA's en gespecialiseerd operationeel personeel nodig zijn. Vooral in grootschalige omgevingen is deze beheerslast aanzienlijk.

    Embedded DB's verlichten deze problemen aanzienlijk. Wanneer de database in de applicatie is geïntegreerd, vinden unit tests, builds, versiebeheer en implementatie samen plaats, waardoor er geen afzonderlijke serverbewerking nodig is. Bovendien schaalt de embedded DB mee wanneer de applicatie wordt uitgeschaald, en is geautomatiseerd beheer via DevOps-cultuur en CI/CD-pijplijnen mogelijk. Met name in startups, kleine services en prototype-ontwikkelomgevingen verminderen embedded databases de operationele complexiteit aanzienlijk en versnellen ze de ontwikkelings- en implementatiesnelheid.

  • Ontwikkeling van hoogwaardige systeemtalen en ecosystemen

    In het verleden was het gebruikelijk dat databases en applicaties in verschillende talen werden geschreven. Databaseservers die hoge prestaties vereisten, werden bijvoorbeeld voornamelijk in C, C++ geschreven, terwijl applicaties werden ontwikkeld in talen zoals Java, Python en PHP. Hoewel deze aanpak effectief was voor prestatieoptimalisatie, had het beperkingen zoals geheugenstabiliteitsproblemen, complexe gelijktijdigheidsverwerking, latentie en moeilijkheden bij bibliotheekintegratie en implementatie.

    Echter, met de recente opkomst van moderne systeemprogrammeertalen zoals Go en Rust zijn deze beperkingen aanzienlijk verminderd. Met name Go is geschikt voor het schrijven van zowel hoogwaardige applicaties als laag niveau programma's zoals database-engines, waardoor databases en applicaties binnen één taaleconomie kunnen worden behandeld.

    In Golang worden BadgerDB en PebbleDB veel gebruikt als hoogwaardige embedded databases. Dit betekent dat embedded databases niet langer slechts een lichtgewicht alternatief zijn voor databaseservers, maar een belangrijke, concurrerende optie zijn geworden.

Conclusie

Voorwaarden die centraal beheer van grote hoeveelheden gegevens, complexe transacties en hoge gelijktijdigheid vereisen, blijven databaseservers de krachtigste oplossing. Echter, in projecten waar individuele services in een MSA-omgeving, IoT edge devices, snelle prototyping en operationele efficiëntie belangrijk zijn, kunnen embedded databases een efficiëntere en redelijkere keuze zijn. Uiteindelijk is het cruciaal om de optimale tool te kiezen die het beste past bij de gegeven situatie en vereisten, en de ontwikkeling van embedded databases biedt ons een bredere en diversere reeks opties.