Cassandra pour les développeurs java

6 290 vues

Publié le

Présentation de Cassandra à la session NoSQL du Ch'ti Jug le 12 Décembre

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

Aucun téléchargement
Vues
Nombre de vues
6 290
Sur SlideShare
0
Issues des intégrations
0
Intégrations
843
Actions
Partages
0
Téléchargements
116
Commentaires
0
J’aime
6
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Cassandra pour les développeurs java

  1. 1. pourles (ch‟tis) Développeurs Java Jérémy Sevellec
  2. 2. Merci à• Nate McCall (@zznate)• Sylvain Lebresne (@pcmanus)• Jonathan Ellis (@spyced)
  3. 3. Qui est-ce? MB « Qui Est-ce? »
  4. 4. Qui est-ce?<moi>• Jérémy Sevellec• Je travaille chezSarbacane Softwaresur la problématiqueNoSQL (entre autres choses…)
  5. 5. Qui est-ce?• Je suis développeur (« What else? »)
  6. 6. Qui est-ce?• Oui, j‟ai lu « Clean Code » et vous?
  7. 7. Qui est-ce?• Twitter :• http://unchticafe.fr </moi>
  8. 8. « Agenda »• CassandraLes principaux concepts• HectorComment l‟utiliser• cassandra-unitUne librairie indispensable ;-)
  9. 9. NoSQLAu delà du buzz Toy Story
  10. 10. NoSQL« Il ne peut en rester qu‟un? »Non :« The right tool for the right job »Les solutions NoSQL sontsimplement des outils.Ce n‟est donc pas la mort desRDBMS. Highlander
  11. 11. NoSQL Les solutions NoSQL aussi!Il ne faut pas en faire si vous n‟en n‟avez pas besoin
  12. 12. DéfinitionCassandra, c‟est quoi?
  13. 13. DéfinitionMap cassandra = new HashMap();(de toute façon dans la vie tout est hashmap) Ok, C‟est quand même plus que ça
  14. 14. DéfinitionApache Cassandra™ est une Base de données :• Distribuée• Hautement performante• Extrêmement scalable• Tolérante aux pannes (i.e. “no single point of failure”)• proposant un modèle plus riche que le simple modèle “key/value”
  15. 15. Les origines Dynamo Big tableModèle distribué Modèle de données et architecture de stockage
  16. 16. Quelques dates• Développé initialement par Facebook pour la partie « inbox search »• « Open sourcé » en 2008• Devient un projet apache dans l‟incubator en 2009• « Top level project » apache en 2010• Release 1.0 en Octobre 2011 (aujourd‟hui en 1.0.5)
  17. 17. Architecture• Tous les nœuds du cluster ont le même rôle• Pas de spof (les clients peuvent se connecter à n‟importe quel nœud)• Schéma optionnel• Communication peer to peer (gossip protocol)• Datacenter « aware »• Eventuellement consistant• Cache applicatif
  18. 18. Architecture vs RDBMS
  19. 19. Architecturevs RDBMS : ce qu‟on perd• Pas de jointure (à faire coté client ou avecMap/reduce)• Pas de lock ni de transactions (à faire coté client, zookeeper, cage)Ok et qu‟est ce qu‟il se passe quand on fait du« sharding » sur un RDBMS? 
  20. 20. Architecturevs RDBMS : ce qu‟on gagne• Pas de SPOF (réellement)• Schéma optionnel (avec possibilité de rajouter des metadata pour faciliter le requêtage)• Scalabilité linéaire (pour être 2x plus performant : rajouter 2x plus de nœuds et sans coupure ;-))• (Very) Big Data
  21. 21. Modèle de donnéesEt le modèle de données dans tout ça?
  22. 22. Modèle de donnéesMap<Key,Columns> cassandra = new HashMap<> (); (« java 1.7 style »)Ok, C‟est quand même plus que ça
  23. 23. « Columns » column name value ts ”fname” “jeremy”
  24. 24. « Rows » row « jsevellec »”fname” “jeremy”“lname” “sevellec”“phone” 060809..”age” 30
  25. 25. « Column Family » ColumnFamily « jsevellec» « cnorris » « sjob»”fname” “jeremy” ”fname” “Chuck” ”fname” “steve”“lname” “sevellec” “lname” “norris” “lname” “job”“phone” 060809.. “phone” 000000.. “phone” 060809..”age” 21 “picture” 0x1590.. .
  26. 26. « Column Family » (super) ColumnFamily « superKey1» « superKey2» « key2» « key3 » « key1»10 “…” 5 “…” 1 “…”11 “...” 10 “…” 123 “…”17 “…” 18 “…” 1234 “…” ..18 “…” 12345 “…”
  27. 27. Modèle de données• Les « columns » et « super columns » sont triés sur le nom de la colonne• Ce tri est défini au niveau « column family »• Les tris prédéfinis sont: – ByteType (default) – LongType – UTF8Type – LexicalUUIDType – TimeUUIDType
  28. 28. APIQu‟est-ce que je peux faire avec?
  29. 29. API cassandra.put(key,value); value = cassandra.get(key);Ok, C‟est quand même plus que ça
  30. 30. API• Ecriture / mise à jour / suppression (en fait c‟est la même opération) sur une colonne, plusieurs colonnes, une ligne. – Toutes ces actions sont idempotentes! (sauf les compteurs)• Lecture – Get : lire une seule colonne – get_slice : lire un ensemble de colonnes (par nom ou par intervalle) – get_range_slice : un slice sur un ensemble de lignes. – Query by value (secondary index)
  31. 31. API• Manipulation sur le schema• CQL execution (depuis la 0.8) – Aussi un moyen d‟effectuer des lectures – Langage de requêtage « SQL like » simplifié.
  32. 32. Partitionnement et Replication irobot
  33. 33. Partionnement• Le partionnement permet de répartir les lignes sur les nœuds du cluster (à partir de la clé)• Plusieurs choix de partitionnement (au niveau cluster) : – RandomPartitioner : (par defaut) – ByteOrderedPartitioner : stocke les lignes dans l‟ordre des <rowkey> à travers les nœuds du cluster
  34. 34. Partionnement• RandomPartioner – Un token est défini au niveau de chaque nœud un BigInteger entre 0 et 2**127 – Chaque nœud est responsable des cles qui sont dans l‟intervalle qu‟il gère (intervalle entre le token du nœud précédent et le token du nœud). – Un hash (md5) de la clé est effectué et définit un token. La ligne est envoyé sur le nœud qui gère l‟intervalle concerné.
  35. 35. PartionnementRandomPartitioner Exemple :• 4 nœuds• Token = de A à Z A BCDEFGHIJKL XYZAmd5(« jsevellec ») =D W L UVW MNOPQRST T
  36. 36. Replication• La réplication est gérée au niveau d‟un keyspace par le replication_factor• Le replication_factor définit le nombre de copies globales sur le cluster d‟une ligne• La façon dont sont placés les replicas dépend de la stratégie choisie
  37. 37. ReplicationSimpleStrategy : les réplicas sont placés sur lesnœuds suivants dans le clusterExemple avec un RF = 3 A BCDEFGHIJKL XYZAmd5(« jsevellec ») =D W L D D UVW MNOPQRST T D
  38. 38. ReplicationNetworkTopologyStrategy :• la ligne est placée avec le « partitioner »• les réplicas peuvent être placés dans un autre rack, un autre datacenter…• Il faut définir la topology du cluster : snitch.
  39. 39. ConsistanceMais c‟est quoi cette histoire de consistance?
  40. 40. Consistance• Le théorème CAP• Tu ne peux en prendre que 2 et puis c‟est tout.
  41. 41. Consistance• Cassandra a fait le choix : – Availability – Partition Tolerance• Et la consistance??? - “Instead of designing (costly) measure to prevent inconsistency, we acknowledge that the cluster may be in an inconsistent state for a brief period of time, and we deal with it”
  42. 42. Consistance• Cassandra permet au client de faire le choix entre consistance et latence (pour chaque opération).• Le consistency_level est liée au replication_factor. Il définit le nombre de nœud devant se synchroniser avant de répondre à une opération.• Les différents niveaux de consistance sont : – None – One – Quorum – All
  43. 43. ConsistanceWRITE Write(„Y‟) Y A BCDEFGHIJKLCombien de nœuds doiventrépondre pour que ce soit un XYZAsuccès ?- CL.NONE : aucun W L- CL.ONE : 1 ? Y- CL.QUORUM : 1 de plus que la moitié des réplicas- CL.ALL : tous les nœuds UVW concernés par les réplicas. MNOPQRST T Y
  44. 44. ConsistanceREAD READ(„Y‟) Y A BCDEFGHIJKLCombien de nœuds doiventrépondre pour que ce soit un XYZAsuccès ?- CL.ONE : 1 W L- CL.QUORUM : 1 de plus que ? Y la moitié des réplicas- CL.ALL : tous les nœuds concernés par les réplicas. UVW MNOPQRST T Y
  45. 45. ConsistancePour réparer de « l‟inconsistance » quand elle seproduit (perte d‟un nœud, …) :• Hintend handoff : Quand un nœud n‟est pas disponible, les insertions sont envoyés à un autre nœud qui lui renverra quand le nœud redeviendra disponible.• Read repair : En lecture, si les valeurs différents, les nœuds désynchronisés sont réparés en insérant les nouvelles valeurs (basé sur le timestamp)
  46. 46. Outillage
  47. 47. Outillage• cassandra-cli : client ligne de commande de requêtage (meta_data, put et get).• cqlsh : client cql de requêtage• nodetool : opération d‟administration sur les nœuds du cluster
  48. 48. Outillage• OPSCenter
  49. 49. ClientEt mon application dans tout ça?
  50. 50. ClientCassandra n‟impose pas un client, il faut en choisirun dans son langage …
  51. 51. ClientBesoin d‟un client en Java?
  52. 52. Client• Clients java : – Pelops – Kundera – Easy-Cassandra – Cassandrelleet surtout il y a : Hector, le plus populaire
  53. 53. Hector
  54. 54. Hector• http://hector-client.org• Disponible sur le repository maven public• Des projets exemples disponibles sur github• Documentation « pas trop mal »
  55. 55. HectorConnectivité :• Pool de connexions• Load balancing configurable (par défaut round robin)• Découverte automatique des noeuds• Réessai automatique sur les noeuds non disponibles• Suspension des noeuds pour une courte période après plusieurs timeout
  56. 56. HectorApi objet :• Orienté objet• Encapsulation complète de Thrift• Approche typée pour traiter avec le modèle de données• ORM (simple)• HFactory = helper d‟instanciation d‟objet Hector
  57. 57. HectorDu code, du code, du code!
  58. 58. Hector• Intégration sans problème avec Spring – Injecter l‟objet « keyspace »• Hector Object Mapper : – ORM simple – Propose une implémentation JPA
  59. 59. cassandra-unit• Tu aimes : – Cassandra – Le TDD – L‟intégration continueDans ce cas, cassandra-unit est fait pour toi : - démarre un cassandra « embedded » - chargement de données à partir de dataset(xml, json, yaml)
  60. 60. cassandra-unitDu code, du code, du code!
  61. 61. Conseils• Tout oublier ce que vous saviez sur les SGBDR – Dénormalisation, duplication, …• Créer votre modèle en pensant aux requêtes que vous allez devoir faire• Installation simple et efficace : apt-get install cassandra ou yum install cassandra
  62. 62. Conseils• Bien choisir votre replication_factor (structurant)• Bien choisir votre partitioner (très structurant)• Être couvert par ses tests! (pour permettre de refactorer et faire évoluer votre modèle en phase de développements)
  63. 63. Conseils• Il faut bien garder à l‟esprit les principaux concepts de cassandra quand vous développez votre application• Être couvert par ses tests! (pour permettre de refactorer et faire évoluer votre modèle en phase de développements), je sais, je l‟ai déjà dit 
  64. 64. Liens utiles• Cassandra : – http://cassandra.apache.org/ – ML : user@cassandra.apache.org dev@cassandra.apache.org – irc.freenode.net #cassandra #cassandra-dev #cassandra- ops – http://www.datastax.com/ (société commerciale autour de cassandra)• Hector – http://hector-client.org – Google groups : hector-users@googlegroups.com• Casandra-Unit : – https://github.com/jsevellec/cassandra-unit – https://github.com/jsevellec/cassandra-unit-examples
  65. 65. Questions? Ceci est un cluster de dev cassandra

×