GoSuda

Server di Database e Database Embedded

By gosunuts
views ...

Database Server

Un Database Server si riferisce a un database che viene eseguito come processo server indipendente e che elabora le richieste dell'applicazione tramite la rete. La maggior parte dei sistemi RDBMS a noi familiari, come MySQL, PostgreSQL, Oracle DB, rientrano in questo modello. Un Database Server presenta i seguenti vantaggi:

  • Gestione Centralizzata: I dati sono gestiti in modo integrato in un'unica posizione, facilitando la coerenza, la sicurezza, il backup e il ripristino.
  • Indipendenza delle Risorse: Assicurando la propria CPU, memoria e storage, garantisce prestazioni stabili indipendentemente dallo stato dell'applicazione.
  • Elevata Concorrenza e Scalabilità: È ottimizzato per l'accesso simultaneo di molti utenti e la scalabilità orizzontale tramite clustering o replica è relativamente semplice.

Grazie a queste caratteristiche, il Database Server si è affermato come standard nell'infrastruttura software negli ultimi decenni. Tuttavia, a causa del progresso tecnologico e dei cambiamenti ambientali, in alcuni contesti hanno iniziato a emergere gli svantaggi del Database Server, e come alternativa, i database embedded stanno nuovamente guadagnando attenzione.

Nuova Tendenza: Database Embedded

Un database embedded è un motore di database che non richiede un processo server separato, ma è incluso come libreria nell'applicazione ed eseguito nello stesso processo. SQLite, LevelDB e RocksDB sono esempi tipici di database embedded. Il contesto in cui questi database embedded sono emersi come una potente alternativa nel moderno ambiente tecnologico è il seguente:

  • L'Avvento degli SSD

    Nel passato, in un ambiente di sistema basato principalmente su HDD, le prestazioni di accesso casuale erano significativamente inferiori rispetto alle prestazioni di lettura/scrittura sequenziale dei dati. Pertanto, la minimizzazione dell'I/O del disco e la massimizzazione del caching in memoria erano fondamentali per l'ottimizzazione delle prestazioni. I Database Server hanno superato i limiti fisici degli HDD gestendo cache di grandi dimensioni e raggruppando le operazioni di scrittura.

    Tuttavia, l'avvento degli SSD ha completamente cambiato questa premessa. Gli SSD sono migliaia di volte più veloci degli HDD nelle prestazioni di I/O casuale e i loro tempi di latenza sono drasticamente più brevi. Di conseguenza, la percezione precedente che "l'I/O del disco fosse il collo di bottiglia maggiore" è svanita, e al contrario, la latenza derivante dall'accesso remoto ai DB server tramite la rete ha iniziato a emergere come un nuovo collo di bottiglia.

  • MSA e Indipendenza dei Dati

    In passato, una singola, massiccia applicazione monolitica che dipendeva da un unico database centralizzato era una struttura comune. Sebbene semplice, questo approccio presentava problemi quali la difficoltà di modificare lo schema dei dati man mano che la scala del servizio aumentava e un accoppiamento eccessivamente forte, poiché tutti i servizi condividevano lo stesso DB.

    Nell'architettura moderna dei microservizi, per risolvere questi problemi, viene enfatizzato il principio del "Database per Servizio". Assicurando che ogni servizio possieda e incapsuli il proprio archivio dati dedicato, si garantisce l'indipendenza tra i servizi, e l'isolamento dei guasti e la scalabilità diventano più facili. In questo processo, il DB embedded diventa una scelta ideale come archivio dati a livello di servizio. Essendo leggero, veloce e potendo essere distribuito insieme al codice del servizio, si adatta molto bene all'ambiente MSA.

    In particolare, nell'ambiente Kubernetes, la collocazione di un DB embedded accanto al container dell'applicazione tramite il pattern sidecar è ampiamente utilizzata per ottimizzare l'elaborazione dei dati locali. Ciò riduce il collo di bottiglia della rete e minimizza la latenza di accesso ai dati.

  • Semplificazione dell'Ambiente Operativo

    Per i Database Server, sono essenziali procedure operative complesse come l'installazione, le patch, il backup, il ripristino di emergenza, la replica e il monitoraggio delle prestazioni, e ciò richiede DBA dedicati e personale operativo specializzato. In particolare, in ambienti su larga scala, questo onere di gestione è molto significativo.

    I DB embedded mitigano notevolmente questi problemi. Quando un database è integrato all'interno di un'applicazione, il test unitario, la build, la gestione delle versioni e la distribuzione avvengono insieme, eliminando la necessità di operazioni server separate. Inoltre, quando l'applicazione scala orizzontalmente, anche il DB embedded scala con essa, e la gestione automatizzata tramite la cultura DevOps e le pipeline CI/CD diventa possibile. In particolare, per startup, servizi di piccole dimensioni e ambienti di sviluppo di prototipi, i database embedded riducono drasticamente la complessità operativa e aumentano notevolmente la velocità di sviluppo e distribuzione.

  • Evoluzione dei Linguaggi di Sistema ad Alte Prestazioni e dell'Ecosistema

    In passato, era comune che i database e le applicazioni fossero scritti in linguaggi diversi. Ad esempio, i motori di database che richiedevano alte prestazioni erano solitamente scritti in C, C++, mentre le applicazioni erano sviluppate in linguaggi come Java, Python, PHP. Questo approccio era efficace per l'ottimizzazione delle prestazioni, ma presentava limiti quali problemi di stabilità della memoria, gestione complessa della concorrenza, latenza e difficoltà nell'integrazione e nella distribuzione delle librerie.

    Tuttavia, con l'emergere di linguaggi di programmazione di sistema moderni come Go e Rust, questi limiti sono stati notevolmente attenuati. In particolare, Go è adatto per la scrittura di applicazioni ad alte prestazioni, così come per programmi di basso livello come i motori di database, consentendo di gestire sia il database che l'applicazione all'interno di un unico ecosistema linguistico.

    In effetti, in Golang, database embedded ad alte prestazioni come BadgerDB e PebbleDB sono ampiamente utilizzati. Ciò significa che i database embedded stanno diventando una scelta importante con la propria competitività, andando oltre il semplice essere un'alternativa leggera ai Database Server.

Conclusione

Per la gestione centralizzata di grandi quantità di dati, transazioni complesse e requisiti di elevata concorrenza, il Database Server rimane la soluzione più potente. Tuttavia, in ambienti MSA per servizi individuali, dispositivi IoT edge, prototipazione rapida e progetti in cui l'efficienza operativa è cruciale, un database embedded può essere una scelta più efficiente e razionale. In definitiva, ciò che è importante è scegliere lo strumento più adatto alla situazione e ai requisiti specifici, e lo sviluppo dei database embedded ci sta fornendo opzioni più ampie e diversificate.