Cassandra
Dans la mouvance NoSQL (lire dans le texte NotOnlySQL), structure de stockage de données développée en Java entrant dans la catégorie hybride clé/valeur clé/colonne. Cassandra prend place dans le triangle du CAP théorème (autrement nommé théorème de Brewer) proposant à l'utilisateur de régler le niveau de réplication et le niveau de cohérence via paramètres et ce fonction de ses besoins.
Le home du projet : http://cassandra.apache.org/
Vous les trouverez régulièrement pas très loin : Datastax. Société qui propose une surcouche à Cassandra, orienté "entreprise". Ils possèdent une forte expertise sur Cassandra, comptant dans leur rang un certain nombre de committers Cassandra. Leur surcouche permet (entre autres) de faire le lien entre le storage Cassandra et de l'analytics comme Spark ou encore recherche/indexation avec Solr. Ils viennent récemment de s'attaquer aux graph db en faisant l'acquisition de Aurelius (TitanDb).
Les communiqués de presse :
Côté Datastax : http://www.datastax.com/2015/02/datastax-acquires-aurelius-the-experts-behind-titandb
Côté Aurelius : http://thinkaurelius.com/2015/02/03/aurelius-acquired-by-datastax/
Home de TitanDB : http://thinkaurelius.github.io/titan/
Le home de Datastax : http://www.datastax.com/what-we-offer/products-services/datastax-enterprise
Les outils pour travailler avec Cassandra
Les outils qui vont bien (très orienté DataStax, il doit exister d'autres) :
CCM (Cassandra Cluster Manager), outil de développement réalisé par Sylvain Lebresne (DataStax). Non recommandé en production, il permet en local de gérer un cluster avec plusieurs noeuds Cassandra. Très bien pour se faire la main et commencer à jouer avec la technologie.
Home CCM : https://github.com/pcmanus/ccm
How to CCM : http://planetcassandra.org/getting-started-with-ccm-cassandra-cluster-manager/
Article : http://www.datastax.com/dev/blog/ccm-a-development-tool-for-creating-local-cassandra-clusters
DevCenter, outil de Datastax qui permet de bénéficier d'une GUI pour s'interfacer avec un Cassandra déployé. Permet de requêter, voir les traces d'exécution, visualiser les tables de vos namespaces et les tables systèmes.
DevCenter : http://www.datastax.com/what-we-offer/products-services/devcenter
OpsCenter, outils de DataStax également qui nous fait entrer plus du côté administrateur pour visualiser nos clusters, noeuds Cassandra.
OpsCenter : http://www.datastax.com/what-we-offer/products-services/datastax-opscenter
Enfin pour coder son client Java qui vient requêter le datastore Cassandra au travers un noeud qui devient coordinateur : le Java driver Datastax
Home Java Driver (avec la dependency Maven qui va bien) : https://github.com/datastax/java-driver
Cassandra étant en Java bien entendu toutes les JConsole, VisualVM & co sont les bienvenues pour suivre ce qu'il se passe.
Un peu d'histoire
Cassandra trouve à sa source deux projets le précédent BigTable de Google (2006) auquel Cassandra empruntera le modèle de données structuré ColumnFamily. Et Dynamo d'Amazon (2007) auquel Cassandra reprend le partitionning et le système de réplication.
Ces deux projets ont fait l'objet de publication technique :
- Bigtable: A Distributed Storage System for Structured Data
- Dynamo: Amazon’s Highly Available Key-value Store
Cassandra est développé au sein de Facebook par Avinash Lakshman (un des créateur de Dynamo d'Amazon) et Prashant Malik (ingénieur Facebook). Il sera open sourcé par Facebook en 2008.
A propos du key value store vs column family : http://www.edwardcapriolo.com/roller/edwardcapriolo/entry/on_key_value_vs_column
Quelques mots clé (pour approfondir via google & co)
Généralités sur l'architecture : http://wiki.apache.org/cassandra/ArchitectureOverview
OnHeap, offHeap : Cassandra (en java donc dans une jvm) utilise du off heap pour stocker un certain nombre d'information : http://noflex.org/cassandra-component-on-heap-or-off-heap/
Composants techniques au cœur de Cassandra : MemTable et SSTable
A connaitre pour bien comprendre le fonctionnement : Read Path et Write Path
http://fr.slideshare.net/joshmckenzie/cassandra-21-read-write-path
Requête sur une base Cassandra :
CQL : https://cassandra.apache.org/doc/cql3/CQL.html
Avant le CQL, le shell (qui viendrait à disparaitre) : http://wiki.apache.org/cassandra/CassandraCli
Enfin quelques drivers permettant d'attaquer Cassandra dans différents langages : http://planetcassandra.org/client-drivers-tools/
Quelques Algo derrière cette belle machine
Au coeur du principe distribué de Cassandra et ce qui en fait un système sans SPOF (Single Point Of Failure) : le Gossip protocole
- http://en.wikipedia.org/wiki/Gossip_protocol
- http://highscalability.com/blog/2011/11/14/using-gossip-protocols-for-failure-detection-monitoring-mess.html
- http://www.datastax.com/documentation/cassandra/2.0/cassandra/architecture/architectureGossipAbout_c.html
Filtre de Bloom
- http://en.wikipedia.org/wiki/Bloom_filter
- http://spyced.blogspot.fr/2009/01/all-you-ever-wanted-to-know-about.html
- http://billmill.org/bloomfilter-tutorial/
Merkle tree, pour vérifier la consistance et permettre la remonté rapide de nœud :
- http://en.wikipedia.org/wiki/Merkle_tree
- http://wiki.apache.org/cassandra/AntiEntropy
- http://distributeddatastore.blogspot.fr/2013/07/cassandra-using-merkle-trees-to-detect.html
- http://stackoverflow.com/questions/5486304/explain-merkle-trees-for-use-in-eventual-consistency
Paxos pour les transactions dites légère
- http://en.wikipedia.org/wiki/Paxos_%28computer_science%29
- https://www.youtube.com/watch?v=WX4gjowx45E
- http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0
- http://www.vldb.org/pvldb/vol4/p243-rao.pdf
Dans la vie réelle
Pour finir quelques utilisateurs de Cassandra en production sans gâcher la surprise quelques noms connus : CERN, eBay, GitHub, Instagram, Intuit, Netflix, Reddit, The Weather Channel, ...
Pour plus de détails :
Utilisateurs de Cassandra : http://planetcassandra.org/companies/
L'exemple de Netflix (presentation 2012) : http://fr.slideshare.net/acunu/cassandra-eu-2012-netflixs-cassandra-architecture-and-open-source-efforts
Blog technique netflix : http://techblog.netflix.com/search/label/Cassandra
Conclusion
En guise de conclusion, trois points qui me semblent importants à réfléchir pour passer un projet sur Cassandra :
- J'ai mon storage de donnée mais comment je mets en place mon moteur d'agrégation (Datastax avec sa surcouche propose quelques solutions).
- Le schéma de mon stockage dans Cassandra est très fortement impacté par comment je vais requêter, il faut avoir une idée de ce que l'on veut avant de partir (contrairement à des datastorage plus souple comme MongoDB, orienté document).
- Une fois dedans, quelles portes de sorties. Par exemple comment je back up sur un autre support mes données qui sont dans les noeuds Cassandra ... un réponse peut être pas besoin, la solution comme cela me va mais à ce moment attention aux migrations.
Quelques éléments de réflexion chez les géants du web :
Aucun commentaire:
Enregistrer un commentaire