CassandraHaute disponibilité et élasticité avec Cassandra17/06/2011
Speaker      @mfiguiere      blog.xebia.fr      Michaël Figuière           Distributed                                 Arch...
Cassandra en quelques mots• Projet Apache, base de données NoSQL, peer to peer, hautement disponible         Possibilité d...
Dynamo et CassandraObjectifs similaires :       - Création de Dynamo                             - Dernier incident majeur...
SGBDR et scalabilité
Comment assurer la scalabilité avec un SGBDR ?       Mise en oeuvre  typique avec MySQL                                  R...
Sharding avec un SGBDR
Sharding avec un SGBDRSur serveur A   Sur serveur B
Sharding avec un SGBDRSur serveur A   Sur serveur B                          ?                         ?
Sharding avec un SGBDRSur serveur A                     Dénormalisation   Sur serveur B                Dénormalisation
Sharding avec un SGBDRSur serveur A                       Dénormalisation   Sur serveur B                Dénormalisation  ...
Sharding avec un SGBDR : les problèmes• Pour garder de bonnes performances, les relations many-to-many et  many-to-one néc...
Une alternative
D’une table de hachage à une BDD clé-valeur Ensemble des clés partitionnées selon         leur préfixe
D’une table de hachage à une BDD clé-valeur                              Ensemble des clés     Consistent hashing
D’une table de hachage à une BDD clé-valeur       Une partition par   Multiples partitions           instance           pa...
L’architecture de Cassandra
Organisation des noeuds en anneau            Noeud    Noeud    Noeud                             Noeud            Noeud   ...
Organisation des noeuds en anneau          Noeud    Noeud                                   L’organisation en anneau      ...
Interactions Client / Serveur   Client                           Noeud    Noeud   Client                           Noeud  ...
Interactions Client / Serveur   Client   Client               ?           Noeud                                    Noeud  ...
Organisation des noeuds en anneau   Client                       Noeud     Noeud                                          ...
Gestion des défaillances• Mécanisme d’anti-entropie, assurant des réplicas identiques         Echange des Hash des données...
Stockage sur disque
Architecture append-only de Cassandra         MemTable                                         RAM                        ...
Architecture append-only de Cassandra         MemTable                                         RAM                        ...
Que devient ACID ?
Que devient ACID ?• Tout accès réseau est faillible• Des concessions doivent être faites sur le modèle de données• Des con...
Le théorème CAP                                     Sur ces 3 propriétés,                                           seules...
Le théorème CAPCassandra                                 BDD relationnelles                Consistance                    ...
Consistance éventuelle   Client                          Noeud    Noeud                                            replica...
Consistance selon nombre de réponses attendues                                          Temps               A   A     A   ...
Consistance selon nombre de réponses attendues                                               Temps               A   A    ...
Consistance selon nombre de réponses attendues                                                    Temps                   ...
Consistance selon nombre de réponses attendues                          R+W=N                    A     A   A    A         ...
Consistance selon nombre de réponses attendues                          R+W>N                    A     A   A    A         ...
Consistance apparente pour le client                   1   Client                            Noeud          Noeud         ...
Atomicité et Isolation• Les données ne sont plus co-localisées         Localisation non prédictible dans le temps• Les tra...
Durabilité• Ecriture sur un ou plusieurs disques         La réplication permet de renforcer la durabilité• Ecriture multip...
Modèle de données
Le modèle en famille de colonnes    A chaque ID de ligne correspond     une liste de couples clé-valeur          BDD relat...
Super-colonnes   Les valeurs d’une super-colonne sont  des collections de            colonnes
Un modèle de données peu intuitif...
Exemple avec un panier d’achat   johndoe     17:21   Iphone        17:32   DVD Player     17:44     MacBook   willsmith   ...
APIs disponibles• Cassandra est accédé par Thrift, un RPC développé par Facebook         Thrift est disponible pour les pr...
Exemple d’écriture avec CassandraCluster cluster =   HFactory.getOrCreateCluster("cluster", new CassandraHostConfigurator(...
Exemple de lecture avec CassandraSliceQuery<String, String, String> query =    HFactory.createSliceQuery(keyspace,        ...
Un cas d’usage
Un site de e-commerce             Recherche des                                                  Solr             produits...
Cassandra en production
Cassandra en production• En production chez de nombreux « Grands du Web »• Outillage encore réduit• Monitoring par JMX• Le...
DataStax OpsCenter
L’intérêt pour l’entreprise• Stockage polyglotte : une meilleure adéquation entre la BDD et les données• Scalabilité linéa...
Questions / Réponses                       ?                   @mfiguiere                   blog.xebia.fr
Prochain SlideShare
Chargement dans…5
×

BreizhCamp (Jun 2011) - Haute disponibilité et élasticité avec Cassandra

2 412 vues

Publié le

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 412
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
49
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

BreizhCamp (Jun 2011) - Haute disponibilité et élasticité avec Cassandra

  1. 1. CassandraHaute disponibilité et élasticité avec Cassandra17/06/2011
  2. 2. Speaker @mfiguiere blog.xebia.fr Michaël Figuière Distributed Architectures NoSQLSearch Engines
  3. 3. Cassandra en quelques mots• Projet Apache, base de données NoSQL, peer to peer, hautement disponible Possibilité de stocker plusieurs To• Encore en version 0.8 Mais déjà déployée en production !• Approche très différente des bases de données relationnelles Nécessite un peu d’apprentissage...
  4. 4. Dynamo et CassandraObjectifs similaires : - Création de Dynamo - Dernier incident majeur en 2004• Faible latence - < 40 min d’indisponibilité par an• Très haute disponibilité• Scalabilité massive - Création de Cassandra - Recherche dans les messages - 500 millions d’utilisateurs
  5. 5. SGBDR et scalabilité
  6. 6. Comment assurer la scalabilité avec un SGBDR ? Mise en oeuvre typique avec MySQL Réplication synchrone ou asynchrone
  7. 7. Sharding avec un SGBDR
  8. 8. Sharding avec un SGBDRSur serveur A Sur serveur B
  9. 9. Sharding avec un SGBDRSur serveur A Sur serveur B ? ?
  10. 10. Sharding avec un SGBDRSur serveur A Dénormalisation Sur serveur B Dénormalisation
  11. 11. Sharding avec un SGBDRSur serveur A Dénormalisation Sur serveur B Dénormalisation On perd alors beaucoup de l’intérêt du relationnel !
  12. 12. Sharding avec un SGBDR : les problèmes• Pour garder de bonnes performances, les relations many-to-many et many-to-one nécessitent d’être dé-normalisées• Gestion du resharding• Code applicatif complexifié
  13. 13. Une alternative
  14. 14. D’une table de hachage à une BDD clé-valeur Ensemble des clés partitionnées selon leur préfixe
  15. 15. D’une table de hachage à une BDD clé-valeur Ensemble des clés Consistent hashing
  16. 16. D’une table de hachage à une BDD clé-valeur Une partition par Multiples partitions instance par instance
  17. 17. L’architecture de Cassandra
  18. 18. Organisation des noeuds en anneau Noeud Noeud Noeud Noeud Noeud Replica Noeud Partition 1 Replica Replica Partition 2 Partition N
  19. 19. Organisation des noeuds en anneau Noeud Noeud L’organisation en anneau permet de d’affecter un Noeud Noeud intervalle à chaque partition, facilitant ainsi les ajouts et suppressions d’instances Noeud Noeud
  20. 20. Interactions Client / Serveur Client Noeud Noeud Client Noeud Noeud Client Noeud Client Noeud
  21. 21. Interactions Client / Serveur Client Client ? Noeud Noeud Noeud replica Noeud replica Client Noeud Noeud Client replica
  22. 22. Organisation des noeuds en anneau Client Noeud Noeud replica Client Noeud Noeud replica Client Noeud Noeud Client replica Agit en tant que proxy
  23. 23. Gestion des défaillances• Mécanisme d’anti-entropie, assurant des réplicas identiques Echange des Hash des données entre réplicas• Hinted-Handoff stocke les écritures pendant l’absence d’un noeud Semblable à une prise de messages
  24. 24. Stockage sur disque
  25. 25. Architecture append-only de Cassandra MemTable RAM Disque Log SSTable
  26. 26. Architecture append-only de Cassandra MemTable RAM Disque Log SSTable
  27. 27. Que devient ACID ?
  28. 28. Que devient ACID ?• Tout accès réseau est faillible• Des concessions doivent être faites sur le modèle de données• Des concessions doivent être faites sur la consistance
  29. 29. Le théorème CAP Sur ces 3 propriétés, seules 2 sont réalisables Consistance à la fois Disponibilité Tolérance aux défaillances
  30. 30. Le théorème CAPCassandra BDD relationnelles Consistance Disponibilité Tolérance aux défaillances Impossible
  31. 31. Consistance éventuelle Client Noeud Noeud replica Client Noeud Noeud replica Client Noeud Client replica Noeud Transfère les requêtes R/W vers tous les réplicas
  32. 32. Consistance selon nombre de réponses attendues Temps A A A A 4 réplicas
  33. 33. Consistance selon nombre de réponses attendues Temps A A A A 4 réplicas B A A A Ecriture avec attente d’accusé d’un seul noeud
  34. 34. Consistance selon nombre de réponses attendues Temps R+W<N A A A A 4 réplicas B A A A B A A ALecture avec attente de Ecriture avec attente réponse de 2 noeuds d’accusé d’un seul noeud
  35. 35. Consistance selon nombre de réponses attendues R+W=N A A A A B B A A B B A ALecture avec attente de Ecriture avec attente réponse de 2 noeuds d’accusé de 2 noeuds
  36. 36. Consistance selon nombre de réponses attendues R+W>N A A A A B B B A B B B ALecture avec attente de Ecriture avec attente réponse de 3 noeuds d’accusé de 2 noeuds
  37. 37. Consistance apparente pour le client 1 Client Noeud Noeud 2 replica 3 Client 4 2 Noeud Noeud 3 replica Client 3 2 Noeud Client replica Noeud Transfère les requêtes R/W vers tous les réplicas
  38. 38. Atomicité et Isolation• Les données ne sont plus co-localisées Localisation non prédictible dans le temps• Les transactions distribuées nuiraient à la disponibilité et aux performances• Atomicité et Isolation par opération sur une clé
  39. 39. Durabilité• Ecriture sur un ou plusieurs disques La réplication permet de renforcer la durabilité• Ecriture multiples en mémoire La réplication apporte la durabilité• En mémoire avec écriture asynchrone sur disque Pas de durabilité
  40. 40. Modèle de données
  41. 41. Le modèle en famille de colonnes A chaque ID de ligne correspond une liste de couples clé-valeur BDD relationnelle BDD orientée colonnes
  42. 42. Super-colonnes Les valeurs d’une super-colonne sont des collections de colonnes
  43. 43. Un modèle de données peu intuitif...
  44. 44. Exemple avec un panier d’achat johndoe 17:21 Iphone 17:32 DVD Player 17:44 MacBook willsmith 6:10 Camera 8:29 Ipad pitdavis 14:45 PlayStation 15:01 Asus EEE 15:03 Iphone
  45. 45. APIs disponibles• Cassandra est accédé par Thrift, un RPC développé par Facebook Thrift est disponible pour les principaux langages• Hector est un client de haut niveau pour Java Offre un mapping de type JPA• PhpCassa est un client pour PHP, PyCassa est un client pour python
  46. 46. Exemple d’écriture avec CassandraCluster cluster = HFactory.getOrCreateCluster("cluster", new CassandraHostConfigurator("server1:9160"));Keyspace keyspace = HFactory.createKeyspace("EcommerceKeyspace", cluster, new QuorumAllConsistencyLevelPolicy());Mutator<String> mutator = HFactory.createMutator(keyspace, stringSerializer);mutator.insert("johndoe", "ShoppingCartColumnFamily", HFactory.createStringColumn("14:21", "Iphone")); Insère une colonne dans une ShoppingCartColumnFamily
  47. 47. Exemple de lecture avec CassandraSliceQuery<String, String, String> query = HFactory.createSliceQuery(keyspace, stringSerializer, stringSerializer, stringSerializer);query.setColumnFamily("ShoppingCartColumnFamily") .setKey("johndoe") .setRange("", "", false, 10);QueryResult<ColumnSlice<String, String>> result = query.execute(); Lit un intervalle de 10 colonnes dans une ShoppingCartColumnFamily
  48. 48. Un cas d’usage
  49. 49. Un site de e-commerce Recherche des Solr produits Stockage du catalogue produits MySQL Application Stockage des Cassandra comptes clients Stockage de Memcached données de sessions
  50. 50. Cassandra en production
  51. 51. Cassandra en production• En production chez de nombreux « Grands du Web »• Outillage encore réduit• Monitoring par JMX• Les backups peuvent être problématiques avec des volumes importants• La gestion du cluster requiert une équipe d’exploitation expérimentée
  52. 52. DataStax OpsCenter
  53. 53. L’intérêt pour l’entreprise• Stockage polyglotte : une meilleure adéquation entre la BDD et les données• Scalabilité linéaire : être à même de répondre aux besoins les plus gourmands• Haute disponibilité : du multi-serveurs au multi-datacenters• Elasticité : une intégration naturelle à la logique du Cloud Computing• Curseur pour s’adapter : + de consistence ou + de fiabilité (Quorums)• Et finalement... la possibilité crée le besoin !
  54. 54. Questions / Réponses ? @mfiguiere blog.xebia.fr

×