Servere de baze de date și baze de date încorporate
Database Server
Un Database Server se referă la o bază de date care rulează ca un proces server independent și procesează cererile aplicației prin rețea. Majoritatea sistemelor RDBMS familiare, cum ar fi MySQL, PostgreSQL și Oracle DB, se încadrează în acest model. Un Database Server are următoarele avantaje:
- Administrare centralizată: Datele sunt gestionate centralizat într-un singur loc, facilitând consistența, securitatea, backup-ul și recuperarea.
- Independența resurselor: Alocă propriile resurse CPU, memorie și stocare, asigurând o performanță stabilă indiferent de starea aplicației.
- Concurență și scalabilitate ridicate: Este optimizat pentru accesul concurent al multor utilizatori, iar scalarea orizontală prin clusterizare sau replicare este relativ ușoară.
Datorită acestor caracteristici, Database Server-ul a devenit standardul infrastructurii software în ultimele decenii. Cu toate acestea, din cauza progreselor tehnologice și a schimbărilor de mediu, dezavantajele Database Server-ului au început să devină evidente în anumite medii, iar bazele de date încorporate (embedded databases) au revenit în atenția ca alternativă.
Noua tendință: Embedded Database
Un Embedded Database este un motor de bază de date care este inclus ca o bibliotecă într-o aplicație și rulează în același proces, fără a necesita un proces server separat. SQLite, LevelDB și RocksDB sunt exemple tipice de embedded databases. Contextul în care aceste embedded databases au devenit o alternativă puternică în mediul tehnologic actual este următorul:
Apariția SSD-urilor
În trecut, în mediile de sistem centrate pe HDD-uri, performanța de acces aleatoriu era semnificativ mai slabă în comparație cu performanța de citire/scriere secvențială a datelor. Prin urmare, minimizarea I/O-ului pe disc și maximizarea cache-ului de memorie erau esențiale pentru optimizarea performanței. Database Server-ele au depășit limitele fizice ale HDD-urilor prin operarea unor cache-uri mari și prin procesarea agregată a operațiunilor de scriere.
Cu toate acestea, apariția SSD-urilor a schimbat complet această premisă. SSD-urile sunt de mii de ori mai rapide în I/O aleatoriu decât HDD-urile, iar latența este, de asemenea, semnificativ mai scurtă. Drept urmare, percepția anterioară conform căreia „I/O-ul pe disc este cel mai mare blocaj” a dispărut, iar latența cauzată de accesul la un DB server la distanță prin rețea a început să iasă în evidență ca un nou blocaj.
MSA și Independența Datelor
În trecut, o arhitectură obișnuită era cea în care o aplicație monolitică imensă se baza pe o bază de date centralizată unică. Această abordare era simplă, dar pe măsură ce scara serviciului creștea, modificarea schemei de date devenea dificilă, iar toate serviciile partajau aceeași bază de date, ducând la o cuplare excesiv de puternică.
În arhitectura modernă de microservicii, principiul „Database per Service” este important pentru a rezolva aceste probleme. Fiecare serviciu își deține și își încapsulează propriul depozit de date, asigurând independența între servicii și facilitând izolarea erorilor și scalarea. În acest proces, embedded DB-urile devin o alegere ideală pentru stocarea datelor la nivel de serviciu. Fiind ușoare și rapide, ele pot fi implementate împreună cu codul serviciului, potrivindu-se foarte bine cu mediul MSA.
De exemplu, în mediul Kubernetes, un model comun este utilizarea modelului Sidecar pentru a plasa un embedded DB lângă containerul aplicației, optimizând procesarea datelor locale. Acest lucru reduce blocajele de rețea și minimizează latența accesului la date.
Simplificarea Mediului de Operare
Un Database Server necesită proceduri operaționale complexe, cum ar fi instalarea, patch-uirea, backup-ul, recuperarea în caz de dezastru, replicarea și monitorizarea performanței, iar acest lucru necesită un DBA dedicat și personal operațional specializat. În special în mediile la scară largă, această povară de gestionare este foarte mare.
Un embedded DB atenuează considerabil aceste probleme. Atunci când baza de date este integrată în aplicație, testele unitare, compilarea, gestionarea versiunilor și implementarea se realizează împreună, eliminând necesitatea unei operațiuni separate a serverului. De asemenea, atunci când aplicația se scalează orizontal (Scale-out), embedded DB-ul se scalează împreună cu ea, iar gestionarea automată este posibilă prin cultura DevOps și pipeline-urile CI/CD. În special pentru startup-uri, servicii la scară mică și medii de dezvoltare de prototipuri, embedded databases reduc semnificativ complexitatea operațională și măresc considerabil viteza de dezvoltare și implementare.
Evoluția limbajelor de sistem de înaltă performanță și a ecosistemului
În trecut, era obișnuit ca baza de date și aplicația să fie scrise în limbaje diferite. De exemplu, motoarele de baze de date care necesitau performanțe ridicate erau scrise în principal în C, C++, iar aplicațiile erau dezvoltate în limbaje precum Java, Python, PHP. Această abordare era eficientă pentru optimizarea performanței, dar avea limitări legate de probleme de stabilitate a memoriei, gestionarea complexă a concurenței, latență și dificultăți în integrarea și implementarea bibliotecilor.
Cu toate acestea, odată cu apariția recentă a limbajelor de programare de sistem moderne, cum ar fi Go și Rust, aceste limitări au fost mult atenuate. În special, Go este potrivit nu numai pentru aplicații de înaltă performanță, ci și pentru scrierea de programe de nivel scăzut, cum ar fi motoarele de baze de date, permițând gestionarea bazei de date și a aplicației împreună într-un singur ecosistem lingvistic.
De fapt, în Golang, embedded databases de înaltă performanță, cum ar fi BadgerDB și PebbleDB, sunt utilizate activ. Acest lucru înseamnă că embedded databases nu sunt doar o alternativă ușoară la Database Server, ci o opțiune importantă cu propria sa competitivitate.
Concluzie
Pentru gestionarea centralizată a datelor la scară largă, tranzacții complexe și concurență ridicată, Database Server-ul rămâne cea mai puternică soluție. Cu toate acestea, în cazul serviciilor individuale din mediul MSA, dispozitivelor IoT edge, prototipurilor rapide și proiectelor în care eficiența operațională este importantă, un embedded database poate fi o alegere mai eficientă și mai rezonabilă. În cele din urmă, important este să alegem instrumentul optim care se potrivește cel mai bine situației și cerințelor date, iar evoluția embedded databases ne oferă o gamă mai largă și mai diversă de opțiuni.