Apache Cassandra: gestione distribuita di grandi database
Quando è necessario gestire quantità di dati molto grandi, nell’ordine di vari terabyte o addirittura petabyte, i classici sistemi di database non offrono capacità sufficienti. In questi casi è necessario ricorrere ad applicazioni di big data che siano anche scalabili, poiché spesso il volume di dati effettivo non può essere stimato sin dall’inizio. Una delle soluzioni ad oggi più apprezzate è il sistema open source Cassandra, originariamente sviluppato per Facebook.
Cos’è Apache Cassandra?
Apache Cassandra è un sistema di gestione di database (DBMS) open source per database molto grandi, ma comunque strutturati. Grazie alla buona scalabilità, questi database possono essere distribuiti su diversi cluster, il che significa che Cassandra non è legato a un singolo server.
Cassandra rientra nella categoria dei database NoSQL a colonne, laddove il termine NoSQL va interpretato come “Not only SQL“, vale a dire “non solo SQL”, e non come “nessun SQL”. Al contrario dei tipici database SQL, le strutture NoSQL offrono vantaggi significativi nell’elaborazione di grandi quantità di dati, in quanto non devono sottostare alle limitazioni del linguaggio di interrogazione SQL (Structured Query Language).
Apache Cassandra dispone di un proprio linguaggio di interrogazione denominato Cassandra Query Language (CQL) che, seppur simile a SQL, viene di gran lunga preferito dagli sviluppatori in ragione del fatto che è adattato alle caratteristiche di Cassandra.
Essendo un database NoSQL, Cassandra ha un approccio ridondante che aumenta la sicurezza in caso di malfunzionamenti. Al contrario, la replica dei dati nei sistemi di database relazionali è causa di problemi ricorrenti.
Cassandra è stato originariamente sviluppato da Avinash Lakshman e Prashant Malik per Facebook e rilasciato per la prima volta nel 2008. Nel 2009 il progetto è stato assorbito nell’Apache Incubator inizialmente come progetto secondario dalla Apache Software Foundation, una delle più importanti comunità di sviluppatori open source. Da febbraio 2011 Apache Cassandra è diventato un progetto di punta dell’Apache Software Foundation, così come il diffusissimo server Apache, il server di ricerca Solr, la piattaforma di messaggistica Kafka e il progetto Apache più noto in assoluto OpenOffice.
Oltre agli sviluppatori iniziali, al progetto Cassandra contribuiscono anche altre grandi aziende come IBM, Twitter e Rackspace, uno dei principali provider di servizi informatici negli Stati Uniti. Un altro importante contributo viene fornito inoltre dall’azienda DataStax, il cui modello di business è incentrato essenzialmente su un servizio di assistenza a pagamento, sul supporto all’installazione e su corsi di formazione sul database Cassandra.
DataStax contribuisce oggi, per circa l’80 percento, allo sviluppo open source di Cassandra e offre anche DataStax Enterprise, una soluzione di database commerciale basata sul sistema Cassandra, disponibile gratuitamente.
Secondo la nota classifica dei DB engine, attualmente Apache Cassandra è il database a colonne più conosciuto al mondo e ha ampiamente superato nomi di spicco quali Microsoft Azure Cosmos DB o Google Cloud Bigtable.
Cassandra: funzioni principali
Essendo un vero e proprio sistema distribuito, Cassandra non utilizza alcun master. Tutti i cluster hanno i medesimi diritti e possono elaborare tutte le interrogazioni del database, cosa che aumenta significativamente l’efficienza del sistema. I dati sono ripartiti tra i nodi e la possibilità di aggiungerne degli altri rende il sistema facilmente scalabile. Dopo l’installazione è necessario soltanto distribuire i file di configurazione sul nuovo nodo e Cassandra dispone degli strumenti necessari a questo scopo.
Per garantire la sicurezza in caso di malfunzionamenti e, in caso di emergenza, anche il ripristino dei dati, Apache Cassandra è dotato di un sistema di replica configurabile in base alle necessità. La tolleranza agli errori viene ridotta al minimo attraverso la replica automatica dei dati tra i nodi. I nodi non più funzionanti possono essere facilmente sostituiti e il sistema rimane disponibile per le richieste in qualsiasi momento.
Cassandra offre inoltre un’elevata disponibilità e tolleranza di partizione. Secondo il teorema CAP dell’informatica, non è mai possibile fornire simultaneamente le garanzie di coerenza (consistency), disponibilità (availability) e tolleranza di partizione (partition tolerance). Per questo, come avviene in molti sistemi di big data, la priorità più bassa viene assegnata alla coerenza, ossia al fatto che tutti i nodi vedano gli stessi dati contemporaneamente. Questo perché, in caso di malfunzionamento, la coerenza può essere nuovamente garantita in breve tempo attraverso il ripristino dei dati, mentre le altre due proprietà devono sempre essere garantite.
I database Cassandra sono compatibili con il modello di programmazione sviluppato da Google MapReduce per calcoli con grandi quantità di dati su sistemi distribuiti. Il linguaggio di interrogazione di database CQL (Cassandra Query Language) è specificamente adattato alle strutture dei database Cassandra.
Quali sono i vantaggi di Apache Cassandra?
Uno dei vantaggi principali di Cassandra è la buona scalabilità e l’elevata sicurezza in caso di malfunzionamenti; presupposti fondamentali, questi, per le applicazioni di big data. Nel caso di Cassandra si parla di una scalabilità orizzontale, ossia della possibilità di aumentare la capacità e l’efficienza del sistema attraverso l’aggiunta di nodi.
Nel caso della scalabilità verticale, invece, qualora la potenza o la capacità non sia più adeguata alle esigenze, l’unico database server esistente deve essere equipaggiato con processori più potenti e dischi rigidi più grandi. Essendo possibile lavorare con hardware server comunemente disponibili sul mercato, la scalabilità orizzontale è, nella maggior parte dei casi, la soluzione più conveniente.
Il modello di dati di Cassandra è basato su tabelle hash (hash table), in cui ciascuna riga ha un numero qualunque di colonne. Contrariamente a una classica tabella di database, queste colonne non devono necessariamente essere uguali in ogni riga. Nei benchmark e negli scenari applicativi reali, Apache Cassandra convince inoltre per un notevole vantaggio in termini di velocità rispetto ad altri database NoSQL.
Quando si utilizza Apache Cassandra?
Uno degli obiettivi principali per cui Cassandra è stato sviluppato era quello di permettere una ricerca agevole tra i messaggi in arrivo su Facebook, inviati dagli utenti. L’azienda ha utilizzato a questo scopo un cluster formato da oltre 150 nodi singoli. Non a caso Cassandra, le cui strutture fondamentali sono simili ad Amazon Dynamo e Google Bigtable, viene oggi spesso utilizzato dai provider di grandi social network per i quali è necessario collegare numerosi dati tra gli utenti.
Oltre a Twitter, tra i clienti più noti di Cassandra figurano Instagram, Spotify e anche il fornitore di social bookmark Digg e l’aggregatore di social news Reddit.
Oggi Facebook è passato a un progetto sviluppato autonomamente e derivante dalla combinazione dei sistemi di database HBase e HDFS, entrambi componenti del framework Apache Hadoop.
Anche molte altre reti con grandi quantità di dati utilizzano Cassandra sia come database principale sia come componente secondario per determinati compiti. Tra gli esempi citiamo eBay, GitHub, Netflix, The Weather Channel e il Large Hadron Collider presso il centro di ricerca nucleare europeo CERN (all’incirca 30.000 terabyte di dati all’anno). Una delle maggiori installazioni di Cassandra, con 75.000 nodi, è stata realizzata presso la Apple.
Primi passi con Apache Cassandra
Apache Cassandra funziona sui sistemi UNIX-like e, preferibilmente, sui server Linux. Essendo programmato in Java, Cassandra richiede il corrispondente runtime di Java. I pacchetti di installazione sono localizzati come pacchetti Debian o RPM sui server Apache. Per eseguire l’installazione, aggiungete il repository adatto. Dopo l’installazione è necessario creare le tipiche directory di dati, cache e protocollo e configurare il file cassandra.yaml.
Cassandra ha strumenti a riga di comando propri per compiti amministrativi. Il più importante è la shell, il Cassandra Query Language cqlsh.
Con il comando seguente potete visualizzare una panoramica di tutti i possibili comandi:
cqlsh --help
Un’introduzione chiara ad Apache Cassandra è fornita dal seguente video su YouTube:
Con OpsCenter, DataStax offre uno strumento grafico basato sul web per la gestione e il controllo visivo dei sistemi Cassandra.