GoSuda

Database Server och Embedded Database

By gosunuts
views ...

Databasserver

En databasserver avser en databas som exekveras som en oberoende serverprocess och hanterar applikationsförfrågningar via nätverket. De flesta för oss välbekanta RDBMS, såsom MySQL, PostgreSQL och Oracle DB, motsvarar denna modell. Databasservern innehar följande fördelar:

  • Centraliserad hantering: Data administreras integrerat på en enda plats, vilket underlättar konsistens, säkerhet samt säkerhetskopiering och återställning.
  • Resursoberoende: Den tilldelas egen CPU, minne och lagring, vilket säkerställer stabil prestanda oberoende av applikationens tillstånd.
  • Hög samtidighet och skalbarhet: Den är optimerad för samtidig åtkomst av ett stort antal användare, och horisontell skalning genom klustring eller replikering är relativt okomplicerad.

Tack vare dessa egenskaper har databasservern etablerat sig som standarden för mjukvaruinfrastruktur under de senaste årtiondena. Emellertid har, till följd av teknisk utveckling och miljöförändringar, databasserverns nackdelar börjat uppenbara sig i vissa miljöer, varvid inbäddade databaser återigen erhåller uppmärksamhet som ett alternativ.

Nytt Paradigmskifte: Inbäddad Databas

En inbäddad databas är en databasmaskin som exekveras inom samma process, inkluderad i applikationen i form av ett bibliotek, utan en separat serverprocess. SQLite, LevelDB och RocksDB är representativa exempel på inbäddade databaser. Bakgrunden till varför dessa inbäddade databaser har framträtt som ett robust alternativ i den moderna tekniska miljön är följande:

  • Tillkomsten av SSD

    I tidigare systemmiljöer, som dominerades av HDD, kännetecknades slumpmässig åtkomstprestanda av att vara avsevärt sämre jämfört med sekventiell dataöverföring vid läsning/skrivning. Följaktligen var minimering av disk-I/O och maximering av minnescaching kärnan i prestandaoptimeringen. Databasservern har anpassat sig härtill genom att driva storskalig caching och ackumulera skrivoperationer för batchbehandling, varigenom HDD:ns fysiska begränsningar har övervunnits.

    Tillkomsten av SSD har emellertid radikalt omdefinierat denna premiss. SSD:er uppvisar en slumpmässig I/O-prestanda som är tusentals gånger snabbare än HDD, och latensen är dessutom drastiskt reducerad. Som en konsekvens därav har den tidigare uppfattningen om att "disk-I/O utgör den primära flaskhalsen" kommit att avta, och istället har den latens som uppstår vid nätverksbaserad åtkomst till en fjärr-DB-server börjat framträda som den nya flaskhalsen.

  • MSA och dataoberoende

    Tidigare var det vanligt med en arkitektur där en enda, massiv monolitiskt applikation var beroende av en centraliserad databas. Denna metod är visserligen enkel, men med ökande servicestorlek blev modifiering av databasschemat komplicerat, och det uppstod problematik där kopplingen blev överdrivet stark då alla tjänster delade samma DB.

    Inom modern Microservices Architecture (MSA) betonas principen "Database per Service" för att adressera dessa problem. Genom att varje tjänst äger och kapslar in sin dedikerade datalagring säkerställs oberoendet mellan tjänsterna, vilket förenklar felisolering och skalning. I denna process utgör inbäddade DB:er ett idealiskt alternativ för datalagring på tjänstenivå. De är lätta och snabba, och eftersom de kan distribueras tillsammans med tjänstekoden harmoniserar de utmärkt med MSA-miljöer.

    Företrädesvis används i Kubernetes-miljöer en metod där den inbäddade DB:n placeras intill applikationscontainern via sidvagnmönstret (sidecar pattern) för att optimera lokal databehandling. Detta resulterar i en effekt av minskade nätverksflaskhalsar och minimering av latensen vid dataåtkomst.

  • Förenkling av driftsmiljön

    Databasservrar kräver komplexa driftprocedurer såsom installation, patchning, säkerhetskopiering, haveriåterställning, replikering och prestandaövervakning, vilket föranleder behovet av dedikerade DBA:er och professionell driftpersonal. Särskilt i storskaliga konfigurationer är denna hanteringsbörda betydande.

    Inbäddade DB:er lindrar dessa utmaningar avsevärt. När databasen integreras internt i applikationen sker enhetstestning, byggprocess, versionshantering och driftsättning samtidigt, varigenom separat serverdrift elimineras. Dessutom skalas den inbäddade DB:n parallellt med applikationens skalning utåt (Scale-out), vilket möjliggör automatiserad administration via DevOps-kultur och CI/CD-pipelines. Särskilt i miljöer för nystartade företag, mindre tjänster och prototyputveckling, reducerar inbäddade databaser driftkomplexiteten revolutionerande och accelererar utvecklings- och driftsättningshastigheten markant.

  • Utvecklingen av högpresterande systemprogrammeringsspråk och ekosystem

    Historiskt sett var det vanligt att databasen och applikationen konstruerades på skilda programmeringsspråk. Exempelvis skrevs databasmaskiner som krävde hög prestanda primärt i C eller C++, medan applikationer utvecklades i språk som Java, Python eller PHP. Detta tillvägagångssätt var visserligen effektivt för prestandaoptimering, men det medförde begränsningar relaterade till minnesstabilitetsproblem, komplicerad hantering av samtidighet, latens samt svårigheter med biblioteksintegration och driftsättning.

    Emellertid har dessa begränsningar i stor utsträckning mildrats med den framväxt av moderna systemprogrammeringsspråk som Go och Rust. Särskilt Go lämpar sig inte enbart för högpresterande applikationer utan även för skapandet av lågnivåprogram såsom databasmaskiner, vilket möjliggör att databas och applikation kan hanteras gemensamt inom ett enda språkekosystem.

    I praktiken används högpresterande inbäddade databaser såsom BadgerDB och PebbleDB aktivt inom Golang. Detta indikerar att inbäddade databaser inte enbart etablerar sig som lätta alternativ till databasservrar, utan som signifikanta val med inneboende konkurrenskraft.

Slutsats

Under förutsättningar som kräver centraliserad administration av storskalig data, komplexa transaktioner och hög samtidighet, förblir databasservern den mest robusta lösningen. Dock kan inbäddade databaser utgöra ett effektivare och mer rationellt val för individuella tjänster i MSA-miljöer, IoT edge-enheter, snabb prototyputveckling samt projekt där operativ effektivitet är av avgörande betydelse. Det väsentliga är i slutändan att välja det optimala verktyget som bäst anpassas till den givna situationen och de ställda kraven, och utvecklingen av inbäddade databaser förser oss med ett bredare och mer mångfacetterat spektrum av alternativ.