Introduction à Cassandra - campus plex

7 223 vues

Publié le

A french introduction to Cassandra database.

You can watch the video from here (in french)
http://www.jaxio.com/2012/01/06/introduction-a-cassandra-nosql-video.html

0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
7 223
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3 230
Actions
Partages
0
Téléchargements
146
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Introduction à Cassandra - campus plex

  1. 1. Introduction à Cassandra CampusPlex - Ajaccio 6 janvier 2012 Nicolas Romanettivendredi 6 janvier 12
  2. 2. A propos ๏ Nicolas Romanetti ๏ Co-fondateur JAXIO / Architecte / Développeur ๏ Utilisation de Cassandra lors du Challenge USI 2011vendredi 6 janvier 12
  3. 3. Mon objectif ๏ Vous faire passer de «c’est quoi ce truc!» à «je pige!» ๏ Vous donner envie d’approfondir le sujetvendredi 6 janvier 12
  4. 4. Cassandra ๏ Base de données distribuée conçue pour ‣ gérer une grande quantité de données ‣ résister aux pannes ‣ être performantevendredi 6 janvier 12
  5. 5. Historique ๏ Créée par Facebook (Inbox search) ๏ Open Source en 2008 ๏ Top Level Apache Project en 2010 ๏ Abandonné par Facebook en 2010 ๏ Utilisée par Netflix, Twitter, etc...vendredi 6 janvier 12
  6. 6. Data Model vocabulaire déroutant...vendredi 6 janvier 12
  7. 7. Column name value timestamp La colonne est la plus petite unité de donnée name: 64Ko max value: 2Go maxvendredi 6 janvier 12
  8. 8. Row column Row Row Key col. name col. value col. name col. value col. name col. value col. name col. value Une row: un ensemble de «columns» row key: 64ko max nb max de colonnes: 2 milliardsvendredi 6 janvier 12
  9. 9. Exemple column row granados@wmaker.net facebook login mobile http://www.facebook.com/jerome.granados jgrana 0612345678 nromanetti@jaxio.com login tél. fixe twitter col. name nico 0495123456 @nromanetti row key col. value Pas de contraintes sur les colonnes...vendredi 6 janvier 12
  10. 10. Column Family ≃Table en relationnel login facebook mobile granados@wmaker.net jgrana http://www.facebook.com/jerome.granados 0612345678 User twitter login tél. fixe nromanetti@jaxio.com @nromanetti nico 0495123456 User[granados@wmaker.net][mobile] = 0612345678 col. Family row key col. name col. valuevendredi 6 janvier 12
  11. 11. Le nom est une valeur XK_4501_2012 6:55 7:00 7:20 _01_06 etc... décollage face à la mer survol Capo di Feno survol Cannes ๏ Le nom de la colonne est aussi une valeur! ๏ Les colonnes sont triées par leur nom ๏ Choix de la stratégie de tri (comparator) Long, UTF8, Byte, etc... XK_4501_2012_01_06: vol Air Corsica AJA -> ORY du 6 janvier 2012 à 06:55vendredi 6 janvier 12
  12. 12. Liens ‘BlogEntries’ 2011/12/31 10:52 2012/01/01 23:12 2012/01/06 11:11 wmaker etc... rowkeyA rowkeyB rowkeyC ‘BlogEntry’ Content date Title rowkeyA etc... En cette fin d’année.... 2011/12/31 10:52 Bye bye 2011 vendredi 6 janvier 12
  13. 13. Valueless column ‘TopScores’ 2012/01/02 093:toto 105:titi 106:tutu etc... ๏ Le nom de la colonne porte à lui seul l’information ‣ ici: le score suivi du username ๏ Intérêt? performance...vendredi 6 janvier 12
  14. 14. Super Column granados@wmaker.net login jgrana ๏ Une column contenant des columns twitter WM_Jerome ‣ grouper des informations dépendantes ville Ajaccio User[allusers][granados@wmaker.net][ville] = Ajaccio Super row key super sub col. sub col. Family col. name name col. valuevendredi 6 janvier 12
  15. 15. Column avec plusieurs données contactInfo tel:04..., email: nr@..., city: Ajaccio, etc...vendredi 6 janvier 12
  16. 16. Expiring Column ๏ Une colonne avec un TTL (Time To Live)vendredi 6 janvier 12
  17. 17. Counter Column ๏ Fonctionnalité récente ๏ Permet d’incrémenter un compteur distribuévendredi 6 janvier 12
  18. 18. Tombstone ๏ Delete se fait en écrivant une colonne spéciale! ‣ Timestamp fait foivendredi 6 janvier 12
  19. 19. 2 usages pour les rows ๏ Wide Row: Contient des milliers, millions de colonnes... ‣ données temporelles (timeline twitter, logs, etc...) ๏ Skinny Row: En contient moinsvendredi 6 janvier 12
  20. 20. Requêtes sur les colonnes ... n1 n2 n5 n1033 n2323 n33444 Row Key qqchose qqchose qqchose qqchose qqchose qqchose Slice ๏ Pas de join! ๏ On récupère une ‘Slice’ de column ‣ ex: toutes les colonnes entre ‘n5’ et ‘n2323’ Concevoir son modèle de données en fonction des requêtes que l’on veut fairevendredi 6 janvier 12
  21. 21. Secondary Index twitter country tél. fixe nromanetti@jaxio.com @nromanetti FR 0495123456 ๏ Index sur la valeur d’une colonne ‣ Exemple: index sur la valeur de la column ‘country’ ‣ get users where country = FR;vendredi 6 janvier 12
  22. 22. Révisions :) ๏ column (normale ou super) ๏ wide row, skinny row ๏ column family ๏ requêtes (column slice) / secondary index ๏ valueless column ๏ liens ๏ tombstonevendredi 6 janvier 12
  23. 23. Réplication • Pour assurer la disponibilité des données, il faut les répliquer • ‘Replication Factor’ (RF): nombre de ‘replicas’ (copies) RF = 3 node* 1 node 2 node 3 node 4 node 5 une donnée une autre donnée une ‘Replica’ * node = serveurvendredi 6 janvier 12
  24. 24. Répliquer, mais où? ๏ Tous les serveurs sont identiques ๏ Postulats: ‣ 1 row doit tenir sur 1 serveur ‣ On veut répartir les rows uniformémentvendredi 6 janvier 12
  25. 25. Consistent Hashing bytes Consistent Un ‘token’ entre e.g. String Hash 0 et 2^127 0 tokenB row keyA f(keyA) tokenA row keyB f(keyB) (2^127) / 2 ≃ 10^38vendredi 6 janvier 12
  26. 26. Cassandra Ring ๏ A chaque noeud on attribut un numéro de token ‣ #token = node number * (2^127) / nb of nodes tokenB N0 N7 N1 token1=1*(2^127)/8 token range N6 N2 token2=2*(2^127)/8 tokenA N5 N3 N4 node 2 = contient 1ère replica des rows ayant leur token compris entre token1 et token2vendredi 6 janvier 12
  27. 27. Stratégie de placement ๏ RandomPartioner: Répartir uniformément les différentes ‘rows’ entre les serveurs ๏ Placement Strategy: par défaut, sur les noeuds suivants tokenB N0 RF = 3 N7 N1 1ère replica de la row ‘tokenB’ N6 N2 2ème replica... tokenA N5 N3 3ème replica... N4vendredi 6 janvier 12
  28. 28. Ecriture N0 Client N7 N1 1 RF = 3 2 1: le client contacte n’importe quel N2 N6 noeud 2: le noeud contacté (a.k.a. «storage proxy») sert de coordinateur N5 N3 Note: Le client peut disposer d’une pool N4 de connexions vers quelques noeuds. Le client ne sait pas où la donnée sera écritevendredi 6 janvier 12
  29. 29. Ecriture create password update delete xyz password password 10000 abc ๏ Update 20000 30000 ‣ On crée! 3 columns! ๏ Delete ‣ Crée la column sous forme de Tombstone Le timestamp le plus récent fait foivendredi 6 janvier 12
  30. 30. Ecriture ๏ Comment le client s’assure-t-il que la donnée est effectivement écrite et répliquée? ‣ Attendre une réponse de tous les serveurs impliqués? ‣ Ne pas attendre? ๏ En pratique, cela dépend du use-case ‣ Solution: Tuneable Consistencyvendredi 6 janvier 12
  31. 31. Tuneable Consistency ๏ En écriture, le client indique le Consistency Level désiré ‣ ONE: Je veux être certain qu’au moins une replica a été persistée durablement ‣ QUORUM: Je veux être certain que la majorité des replicas ont été persistées durablement ‣ ALL: Je veux être certain que toutes les replicas ont été persistées durablementvendredi 6 janvier 12
  32. 32. Consistency Level ONE N0 Client write N7 N1 Success N6 N2 N5 N3 N4 RF = 3 write en asynchronevendredi 6 janvier 12
  33. 33. Consistency Level ONE N0 Client N7 N1 N6 X N2 puis, en background... N5 N3 N4 RF = 3vendredi 6 janvier 12
  34. 34. Consistency Level QUORUM N0 Client write N7 N1 Failure N6 X N2 N5 N3 N4 RF = 3vendredi 6 janvier 12
  35. 35. Consistency Level QUORUM N0 Client write N7 N1 RF = 3 N6 N2 N5 N3 Success N4vendredi 6 janvier 12
  36. 36. Consistency Level ALL N0 Client write N7 N1 RF = 3 N6 X N2 N5 N3 Failure N4vendredi 6 janvier 12
  37. 37. Consistency Level ALL N0 Client write N7 N1 RF = 3 N6 N2 N5 N3 Success N4vendredi 6 janvier 12
  38. 38. Hinted Handoff ๏ Quid du noeud sur lequel nous n’avons pas pu écrire? ๏ Lorsqu’un noeud est indisponible le noeud coordinateur écrit la donnée sur un autre noeud ๏ Cet autre noeud est en charge de rejouer le write une fois que le noeud indisponible revient dans le ringvendredi 6 janvier 12
  39. 39. Hinted Handoff N0 Client write N7 N1 RF = 3 N2 N6CL=QUORUM hint N5 N3 Success N4vendredi 6 janvier 12
  40. 40. Hinted Handoff N0 Client N7 N1 RF = 3 N2 N6CL=QUORUM N5 write N3 N4 Lorsque N3 revient, N4 lui envoie la donnée attention au max_hint_window_in_ms (1h par défaut)vendredi 6 janvier 12
  41. 41. Gossip ๏ Comment un noeud sait-il qu’un autre noeud revient dans le ring? ๏ Les noeuds échangent des meta-données entre eux sur l’état du ring ๏ Protocole peer to peervendredi 6 janvier 12
  42. 42. Gossiping N0 N7 N1 X N6 X N2 X N5 X N3 N4 ๏ Chaque seconde, chaque noeud contacte entre 1et 3 noeuds ‣ Conçu pour éviter la formation d’ilots indépendants ‣ Conçu pour que l’information se propage vitevendredi 6 janvier 12
  43. 43. Consistency Level ANY N0 Client write N7 N1 hint RF = 3 N6 N2 N5 N3 Success N4 Intérêt? Performancevendredi 6 janvier 12
  44. 44. Révision / Questions ๏ Consistent Hashing ๏ Token ๏ Replication Factor ๏ Replica placement strategy ๏ Consistency Level ๏ Hinted Handoff ๏ Gossip protocolvendredi 6 janvier 12
  45. 45. Retour sur Ecriture create password update update xyz password password 10000 abc tralala 20000 30000 3 valeurs pour 1 column Le timestamp le plus récent fait foi Mais les nodes ont-ils bien la dernière version?vendredi 6 janvier 12
  46. 46. Noeud down revenant dans le ring ๏ Imaginez un noeud KO pendant une durée durée de vie d’un hint ‣ Il doit récupérer les données ‣ Node repair (Anti Entropy Repair)vendredi 6 janvier 12
  47. 47. Lecture • Comment le client s’assure-t-il que la donnée lue est bien la plus récente? • Attendre une réponse de tous les serveurs impliqués et comparer? • Se fier à la première réponse? • En pratique, cela dépend du use-case • Solution: Tuneable Consistencyvendredi 6 janvier 12
  48. 48. Tuneable Consistency ๏ En lecture, le client indique le Consistency Level désiré ‣ ONE: je veux la donnée d’une des replicas, je m’en fiche si ce n’est pas la plus récente ‣ QUORUM: je veux la donnée la plus récente parmi une majorité de replicas, je me dis que la majorité aura peut être raison ‣ ALL: je veux la donnée la plus récente parmi toutes les replicas, je serai certain d’avoir la plus récentevendredi 6 janvier 12
  49. 49. Lecture N0 Client N7 N1 1 RF = 3 2 1: le client contacte n’importe quel N2 N6 noeud 2: le noeud contacté (a.k.a. «storage proxy») sert de coordinateur N5 N3 Note: Le client peut disposer d’une pool N4 de connexions vers qq noeuds. Le client ne sait pas où la donnée sera luevendredi 6 janvier 12
  50. 50. Consistency Level ONE N0 Client read N7 N1 re ad N6 digest N2 dig est N5 N3 N4 OK, mais N1 avait-il la version la plus récente? read en asynchrone (md5), puis read repair si besoin et si configurévendredi 6 janvier 12
  51. 51. Consistency Level ONE N0 Client read N7 N1 re ad N2 N6 N5 N3 N4 OK, mais N1 avait-il la version la plus récente?vendredi 6 janvier 12
  52. 52. Consistency Level QUORUM N0 Client N7 N1 read re ad RF = 3 N6 digest N2 dig est N5 N3 N4 Retourne version la plus récente entre N1 N2 Mais N3 avait-il une version encore plus récente?vendredi 6 janvier 12
  53. 53. Consistency Level ALL N0 Client read N7 N1 RF = 3 N6 N2 N5 N3 N4 KO, même pas besoin d’essayer de lire N1 et N2vendredi 6 janvier 12
  54. 54. Consistency Level ALL N0 Client read N7 N1 re ad RF = 3 N6 digest N2 dig est N5 N3 N4 OK, retourne version la plus récentevendredi 6 janvier 12
  55. 55. Consistance forte ๏ Comment être certain que la donnée lue est la plus récente? ‣ formule W + R RF W: nb de replica contactées en écriture R: nb de replica contactées en lecture RF: replication factor ๏ Cas trivial ‣ écriture en ALL et lecture en ONEvendredi 6 janvier 12
  56. 56. Consistency RF = 3 N0 QUORUM N0 QUORUM N7 N1 N7 N1 Write Write N2 N6 N2 N6 Read Read N5 N3 N5 N3 N4 ONE N4 QUORUM «Weak» Strongvendredi 6 janvier 12
  57. 57. En pratique ๏ La réplication fonctionne très bien ( qq ms )vendredi 6 janvier 12
  58. 58. Noeud down revenant dans le ring ๏ Imaginons qu’un noeud ait loupé un delete pendant son down time ‣ La donnée non supprimée ne doit pas être prise par le autres noeuds (qui l’ont supprimée) pour une nouvelle donnée! ‣ Grace Period des Tombstone (10j par défaut) ‣ Anti-Entropy Repair (nodetool repair)vendredi 6 janvier 12
  59. 59. Révision / Questions ๏ Storage proxy ๏ Read repair ๏ Strong consistency: R+W RF ๏ Update ๏ Tombstone ๏ Anti-Entropyvendredi 6 janvier 12
  60. 60. Performance en écriture ๏ En écriture, Cassandra est extrêmement rapide, pourquoi? ‣ Ecrit dans le fichier Commit log (append only) ‣ Ecrit en mémoire (MemTable) ‣ Pas d’update...vendredi 6 janvier 12
  61. 61. Performance en écriture Mémoire MemTable MemTable MemTable MemTable Flush Commit SSTable SSTable SSTable SSTable Log SSTable Compaction SSTable SSTable SSTable SSTable SSTable SSTable SSTable SSTable SSTable SSTable Fichier R.O. R.O.vendredi 6 janvier 12
  62. 62. Compaction create password update update xyz 10000 password abc password update dada password 20000 30000 dudu 50000vendredi 6 janvier 12
  63. 63. Performance en lecture ๏ En lecture, Cassandra est quasiment aussi performant ‣ Contact en priorité le noeud le plus «proche» de la donnée ‣ Index pour row key et col. name + Cache ‣ Bloom Filtervendredi 6 janvier 12
  64. 64. Performance en lecture Cache MemTable MemTable MemTable présent da ns SSTTabl e? si p BloomFilter r ése nt BloomFilter BloomFilter BloomFilter BloomFilter Mémoire (fau BloomFilter xp osi tif po ssib le) SSTable SSTable Fichiers SSTable SSTable SSTable SSTablevendredi 6 janvier 12
  65. 65. Snitch ๏ Une adresse IP = Un endroit (DataCenter, Rack) ๏ Utile pour répartir les replicas entre les racks, entre les DataCenters ๏ Le ‘dynamic snitch’ prend aussi en compte le temps de réponse des noeudsvendredi 6 janvier 12
  66. 66. Data Centers / Racks DC USA DC Europe Rack 1 Rack 1 token n+1 token n Replica 1 token p+1 Replica 1 Replica 4 token p token r+1 token r Replica 3 Rack 2 Rack 2 token o+1 Replica 3 token o Replica 2 token q+1 Replica 2 token q token s+1 token s Replica 4 RF = 4vendredi 6 janvier 12
  67. 67. Tokens forment toujours un ring token n token n+1 rack1 token s+1 token o rack2 rack2 Replica 4 token s token o+1 token r+1 token p rack1 rack1 token r token p+1 Replica 3 Replica 1 rack2 token q+1 token q Europe Replica 2 USAvendredi 6 janvier 12
  68. 68. QUORUM pas toujours adapté DC USA DC Europe Rack 1 Rack 1 Client token n+1 token n ☹ token p+1 token p token r token r+1 Rack 2 Rack 2 token o+1 token o token q+1 token q RF = 6 token s+1 token svendredi 6 janvier 12
  69. 69. LOCAL_QUORUM DC USA DC Europe Rack 1 Rack 1 Client token n+1 token n token p+1 token p token r token r+1 ☺ Rack 2 Rack 2 token o+1 token o token q+1 token q token s+1 token s QUORUM sur 1 seul Data Centervendredi 6 janvier 12
  70. 70. EACH_QUORUM DC USA DC Europe Rack 1 Rack 1 Client token n+1 token n token p+1 token p token r token r+1 ☺ Rack 2 Rack 2 token o+1 token o token q+1 token q token s+1 token s QUORUM sur chacun des Data Centervendredi 6 janvier 12
  71. 71. Sujets non abordés... ๏ Ajouter/Supprimer/Remplacer un noeud ๏ OrderPreserving Partitionner ๏ Major Compaction ๏ Failure detector intégré au Gossip ๏ Tunning / Monitoring ๏ Tools ๏ Client API (Hector, etc.), CQL ๏ etc..vendredi 6 janvier 12
  72. 72. Questions? ๏ Et peut-être des réponses :)vendredi 6 janvier 12
  73. 73. Pour approfondir... http://www.datastax.com/docs/1.0/index http://wiki.apache.org/cassandra/ http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved/vendredi 6 janvier 12

×