SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
Cassandra
Haute disponibilité et élasticité avec Cassandra




17/06/2011
Speaker

      @mfiguiere
      blog.xebia.fr



      Michaël Figuière           Distributed
                                 Architectures

                         NoSQL
Search Engines
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...
Dynamo et Cassandra

Objectifs 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
SGBDR et scalabilité
Comment assurer la scalabilité avec un SGBDR ?

       Mise en oeuvre
  typique avec MySQL




                                  Réplication
                                  synchrone ou
                                  asynchrone
Sharding avec un SGBDR
Sharding avec un SGBDR


Sur serveur A




   Sur serveur B
Sharding avec un SGBDR


Sur serveur A




   Sur serveur B
                          ?
                         ?
Sharding avec un SGBDR


Sur serveur A                     Dénormalisation




   Sur serveur B


                Dénormalisation
Sharding avec un SGBDR


Sur serveur A                       Dénormalisation




   Sur serveur B


                Dénormalisation




     On perd alors beaucoup de l’intérêt du relationnel !
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é
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           par instance
L’architecture de Cassandra
Organisation des noeuds en anneau


            Noeud    Noeud




    Noeud
                             Noeud




            Noeud                          Replica
                    Noeud                 Partition 1


                                      Replica       Replica
                                     Partition 2   Partition N
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
Interactions Client / Serveur


   Client                           Noeud    Noeud



   Client
                           Noeud
                                                     Noeud
   Client


                                   Noeud
   Client                                   Noeud
Interactions Client / Serveur


   Client


   Client
               ?           Noeud
                                    Noeud     Noeud
                                              replica




                                                        Noeud
                                                        replica
   Client


                                   Noeud    Noeud
   Client
                                            replica
Organisation des noeuds en anneau


   Client                       Noeud     Noeud
                                          replica


   Client
                       Noeud                        Noeud
                                                    replica
   Client


                               Noeud    Noeud
   Client
                                        replica




                       Agit en tant
                        que proxy
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
Stockage sur disque
Architecture append-only de Cassandra



         MemTable



                                         RAM


                                        Disque


           Log              SSTable
Architecture append-only de Cassandra



         MemTable



                                         RAM


                                        Disque


           Log              SSTable
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 concessions doivent être faites sur la consistance
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
Le théorème CAP



Cassandra                                 BDD relationnelles
                Consistance



                               Disponibilité
               Tolérance
            aux défaillances                    Impossible
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
Consistance selon nombre de réponses attendues

                                          Temps


               A   A     A     A


  4 réplicas
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
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      A




Lecture avec attente de              Ecriture avec attente
 réponse de 2 noeuds              d’accusé d’un seul noeud
Consistance selon nombre de réponses attendues

                          R+W=N
                    A     A   A    A


                    B     B   A    A


                    B     B   A    A




Lecture avec attente de           Ecriture avec attente
 réponse de 2 noeuds              d’accusé de 2 noeuds
Consistance selon nombre de réponses attendues

                          R+W>N
                    A     A   A    A


                    B     B   B    A


                    B     B   B    A




Lecture avec attente de           Ecriture avec attente
 réponse de 3 noeuds              d’accusé de 2 noeuds
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
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é
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é
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 relationnelle            BDD orientée colonnes
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   6:10    Camera        8:29      Ipad


   pitdavis    14:45   PlayStation     15:01     Asus EEE     15:03    Iphone
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
Exemple d’écriture avec Cassandra

Cluster 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
Exemple de lecture avec Cassandra


SliceQuery<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
Un cas d’usage
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
Cassandra en production
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
DataStax OpsCenter
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 !
Questions / Réponses




                       ?
                   @mfiguiere
                   blog.xebia.fr

Contenu connexe

En vedette

August 2013 HUG: Hue: the UI for Apache Hadoop
August 2013 HUG: Hue: the UI for Apache HadoopAugust 2013 HUG: Hue: the UI for Apache Hadoop
August 2013 HUG: Hue: the UI for Apache HadoopYahoo Developer Network
 
[USI] Lambda-Architecture : comment réconcilier BigData et temps-réel
[USI] Lambda-Architecture : comment réconcilier BigData et temps-réel[USI] Lambda-Architecture : comment réconcilier BigData et temps-réel
[USI] Lambda-Architecture : comment réconcilier BigData et temps-réelMathieu DESPRIEE
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormParis_Storm_UG
 
Why Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldWhy Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldDean Wampler
 
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonThrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonIgor Anishchenko
 
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Ippon
 
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Jérôme Mainaud
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésRomain Hardouin
 

En vedette (10)

August 2013 HUG: Hue: the UI for Apache Hadoop
August 2013 HUG: Hue: the UI for Apache HadoopAugust 2013 HUG: Hue: the UI for Apache Hadoop
August 2013 HUG: Hue: the UI for Apache Hadoop
 
[USI] Lambda-Architecture : comment réconcilier BigData et temps-réel
[USI] Lambda-Architecture : comment réconcilier BigData et temps-réel[USI] Lambda-Architecture : comment réconcilier BigData et temps-réel
[USI] Lambda-Architecture : comment réconcilier BigData et temps-réel
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec Storm
 
Why Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldWhy Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data World
 
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonThrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased Comparison
 
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
 
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
 
Une introduction à HBase
Une introduction à HBaseUne introduction à HBase
Une introduction à HBase
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalités
 

Plus de Michaël Figuière

EclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraEclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraMichaël Figuière
 
Paris Cassandra Meetup - Cassandra for Developers
Paris Cassandra Meetup - Cassandra for DevelopersParis Cassandra Meetup - Cassandra for Developers
Paris Cassandra Meetup - Cassandra for DevelopersMichaël Figuière
 
YaJug - Cassandra for Java Developers
YaJug - Cassandra for Java DevelopersYaJug - Cassandra for Java Developers
YaJug - Cassandra for Java DevelopersMichaël Figuière
 
Geneva JUG - Cassandra for Java Developers
Geneva JUG - Cassandra for Java DevelopersGeneva JUG - Cassandra for Java Developers
Geneva JUG - Cassandra for Java DevelopersMichaël Figuière
 
Cassandra summit 2013 - DataStax Java Driver Unleashed!
Cassandra summit 2013 - DataStax Java Driver Unleashed!Cassandra summit 2013 - DataStax Java Driver Unleashed!
Cassandra summit 2013 - DataStax Java Driver Unleashed!Michaël Figuière
 
NYC* Tech Day - New Cassandra Drivers in Depth
NYC* Tech Day - New Cassandra Drivers in DepthNYC* Tech Day - New Cassandra Drivers in Depth
NYC* Tech Day - New Cassandra Drivers in DepthMichaël Figuière
 
Paris Cassandra Meetup - Overview of New Cassandra Drivers
Paris Cassandra Meetup - Overview of New Cassandra DriversParis Cassandra Meetup - Overview of New Cassandra Drivers
Paris Cassandra Meetup - Overview of New Cassandra DriversMichaël Figuière
 
ApacheCon Europe 2012 - Real Time Big Data in practice with Cassandra
ApacheCon Europe 2012 - Real Time Big Data in practice with CassandraApacheCon Europe 2012 - Real Time Big Data in practice with Cassandra
ApacheCon Europe 2012 - Real Time Big Data in practice with CassandraMichaël Figuière
 
NoSQL Matters 2012 - Real Time Big Data in practice with Cassandra
NoSQL Matters 2012 - Real Time Big Data in practice with CassandraNoSQL Matters 2012 - Real Time Big Data in practice with Cassandra
NoSQL Matters 2012 - Real Time Big Data in practice with CassandraMichaël Figuière
 
GTUG Nantes (Dec 2011) - BigTable et NoSQL
GTUG Nantes (Dec 2011) - BigTable et NoSQLGTUG Nantes (Dec 2011) - BigTable et NoSQL
GTUG Nantes (Dec 2011) - BigTable et NoSQLMichaël Figuière
 
Duchess France (Nov 2011) - Atelier Apache Mahout
Duchess France (Nov 2011) - Atelier Apache MahoutDuchess France (Nov 2011) - Atelier Apache Mahout
Duchess France (Nov 2011) - Atelier Apache MahoutMichaël Figuière
 
JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...
JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...
JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...Michaël Figuière
 
Mix-IT (Apr 2011) - Intelligence Collective avec Apache Mahout
Mix-IT (Apr 2011) - Intelligence Collective avec Apache MahoutMix-IT (Apr 2011) - Intelligence Collective avec Apache Mahout
Mix-IT (Apr 2011) - Intelligence Collective avec Apache MahoutMichaël Figuière
 
Xebia Knowledge Exchange (mars 2011) - Machine Learning with Apache Mahout
Xebia Knowledge Exchange (mars 2011) - Machine Learning with Apache MahoutXebia Knowledge Exchange (mars 2011) - Machine Learning with Apache Mahout
Xebia Knowledge Exchange (mars 2011) - Machine Learning with Apache MahoutMichaël Figuière
 
FOSDEM (feb 2011) - A real-time search engine with Lucene and S4
FOSDEM (feb 2011) -  A real-time search engine with Lucene and S4FOSDEM (feb 2011) -  A real-time search engine with Lucene and S4
FOSDEM (feb 2011) - A real-time search engine with Lucene and S4Michaël Figuière
 
Xebia Knowledge Exchange (feb 2011) - Large Scale Web Development
Xebia Knowledge Exchange (feb 2011) - Large Scale Web DevelopmentXebia Knowledge Exchange (feb 2011) - Large Scale Web Development
Xebia Knowledge Exchange (feb 2011) - Large Scale Web DevelopmentMichaël Figuière
 
Xebia Knowledge Exchange (jan 2011) - Trends in Enterprise Applications Archi...
Xebia Knowledge Exchange (jan 2011) - Trends in Enterprise Applications Archi...Xebia Knowledge Exchange (jan 2011) - Trends in Enterprise Applications Archi...
Xebia Knowledge Exchange (jan 2011) - Trends in Enterprise Applications Archi...Michaël Figuière
 
Paris JUG (sept 2010) - NoSQL : Des concepts à la réalité
Paris JUG (sept 2010) - NoSQL : Des concepts à la réalitéParis JUG (sept 2010) - NoSQL : Des concepts à la réalité
Paris JUG (sept 2010) - NoSQL : Des concepts à la réalitéMichaël Figuière
 
Xebia Knowledge Exchange (mars 2010) - Lucene : From theory to real world
Xebia Knowledge Exchange (mars 2010) - Lucene : From theory to real worldXebia Knowledge Exchange (mars 2010) - Lucene : From theory to real world
Xebia Knowledge Exchange (mars 2010) - Lucene : From theory to real worldMichaël Figuière
 

Plus de Michaël Figuière (20)

EclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraEclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache Cassandra
 
Paris Cassandra Meetup - Cassandra for Developers
Paris Cassandra Meetup - Cassandra for DevelopersParis Cassandra Meetup - Cassandra for Developers
Paris Cassandra Meetup - Cassandra for Developers
 
YaJug - Cassandra for Java Developers
YaJug - Cassandra for Java DevelopersYaJug - Cassandra for Java Developers
YaJug - Cassandra for Java Developers
 
Geneva JUG - Cassandra for Java Developers
Geneva JUG - Cassandra for Java DevelopersGeneva JUG - Cassandra for Java Developers
Geneva JUG - Cassandra for Java Developers
 
ChtiJUG - Cassandra 2.0
ChtiJUG - Cassandra 2.0ChtiJUG - Cassandra 2.0
ChtiJUG - Cassandra 2.0
 
Cassandra summit 2013 - DataStax Java Driver Unleashed!
Cassandra summit 2013 - DataStax Java Driver Unleashed!Cassandra summit 2013 - DataStax Java Driver Unleashed!
Cassandra summit 2013 - DataStax Java Driver Unleashed!
 
NYC* Tech Day - New Cassandra Drivers in Depth
NYC* Tech Day - New Cassandra Drivers in DepthNYC* Tech Day - New Cassandra Drivers in Depth
NYC* Tech Day - New Cassandra Drivers in Depth
 
Paris Cassandra Meetup - Overview of New Cassandra Drivers
Paris Cassandra Meetup - Overview of New Cassandra DriversParis Cassandra Meetup - Overview of New Cassandra Drivers
Paris Cassandra Meetup - Overview of New Cassandra Drivers
 
ApacheCon Europe 2012 - Real Time Big Data in practice with Cassandra
ApacheCon Europe 2012 - Real Time Big Data in practice with CassandraApacheCon Europe 2012 - Real Time Big Data in practice with Cassandra
ApacheCon Europe 2012 - Real Time Big Data in practice with Cassandra
 
NoSQL Matters 2012 - Real Time Big Data in practice with Cassandra
NoSQL Matters 2012 - Real Time Big Data in practice with CassandraNoSQL Matters 2012 - Real Time Big Data in practice with Cassandra
NoSQL Matters 2012 - Real Time Big Data in practice with Cassandra
 
GTUG Nantes (Dec 2011) - BigTable et NoSQL
GTUG Nantes (Dec 2011) - BigTable et NoSQLGTUG Nantes (Dec 2011) - BigTable et NoSQL
GTUG Nantes (Dec 2011) - BigTable et NoSQL
 
Duchess France (Nov 2011) - Atelier Apache Mahout
Duchess France (Nov 2011) - Atelier Apache MahoutDuchess France (Nov 2011) - Atelier Apache Mahout
Duchess France (Nov 2011) - Atelier Apache Mahout
 
JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...
JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...
JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...
 
Mix-IT (Apr 2011) - Intelligence Collective avec Apache Mahout
Mix-IT (Apr 2011) - Intelligence Collective avec Apache MahoutMix-IT (Apr 2011) - Intelligence Collective avec Apache Mahout
Mix-IT (Apr 2011) - Intelligence Collective avec Apache Mahout
 
Xebia Knowledge Exchange (mars 2011) - Machine Learning with Apache Mahout
Xebia Knowledge Exchange (mars 2011) - Machine Learning with Apache MahoutXebia Knowledge Exchange (mars 2011) - Machine Learning with Apache Mahout
Xebia Knowledge Exchange (mars 2011) - Machine Learning with Apache Mahout
 
FOSDEM (feb 2011) - A real-time search engine with Lucene and S4
FOSDEM (feb 2011) -  A real-time search engine with Lucene and S4FOSDEM (feb 2011) -  A real-time search engine with Lucene and S4
FOSDEM (feb 2011) - A real-time search engine with Lucene and S4
 
Xebia Knowledge Exchange (feb 2011) - Large Scale Web Development
Xebia Knowledge Exchange (feb 2011) - Large Scale Web DevelopmentXebia Knowledge Exchange (feb 2011) - Large Scale Web Development
Xebia Knowledge Exchange (feb 2011) - Large Scale Web Development
 
Xebia Knowledge Exchange (jan 2011) - Trends in Enterprise Applications Archi...
Xebia Knowledge Exchange (jan 2011) - Trends in Enterprise Applications Archi...Xebia Knowledge Exchange (jan 2011) - Trends in Enterprise Applications Archi...
Xebia Knowledge Exchange (jan 2011) - Trends in Enterprise Applications Archi...
 
Paris JUG (sept 2010) - NoSQL : Des concepts à la réalité
Paris JUG (sept 2010) - NoSQL : Des concepts à la réalitéParis JUG (sept 2010) - NoSQL : Des concepts à la réalité
Paris JUG (sept 2010) - NoSQL : Des concepts à la réalité
 
Xebia Knowledge Exchange (mars 2010) - Lucene : From theory to real world
Xebia Knowledge Exchange (mars 2010) - Lucene : From theory to real worldXebia Knowledge Exchange (mars 2010) - Lucene : From theory to real world
Xebia Knowledge Exchange (mars 2010) - Lucene : From theory to real world
 

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

  • 1. Cassandra Haute disponibilité et élasticité avec Cassandra 17/06/2011
  • 2. Speaker @mfiguiere blog.xebia.fr Michaël Figuière Distributed Architectures NoSQL Search Engines
  • 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. Dynamo et Cassandra Objectifs 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
  • 6. Comment assurer la scalabilité avec un SGBDR ? Mise en oeuvre typique avec MySQL Réplication synchrone ou asynchrone
  • 8. Sharding avec un SGBDR Sur serveur A Sur serveur B
  • 9. Sharding avec un SGBDR Sur serveur A Sur serveur B ? ?
  • 10. Sharding avec un SGBDR Sur serveur A Dénormalisation Sur serveur B Dénormalisation
  • 11. Sharding avec un SGBDR Sur serveur A Dénormalisation Sur serveur B Dénormalisation On perd alors beaucoup de l’intérêt du relationnel !
  • 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é
  • 14. D’une table de hachage à une BDD clé-valeur Ensemble des clés partitionnées selon leur préfixe
  • 15. D’une table de hachage à une BDD clé-valeur Ensemble des clés Consistent hashing
  • 16. D’une table de hachage à une BDD clé-valeur Une partition par Multiples partitions instance par instance
  • 18. Organisation des noeuds en anneau Noeud Noeud Noeud Noeud Noeud Replica Noeud Partition 1 Replica Replica Partition 2 Partition N
  • 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. Interactions Client / Serveur Client Noeud Noeud Client Noeud Noeud Client Noeud Client Noeud
  • 21. Interactions Client / Serveur Client Client ? Noeud Noeud Noeud replica Noeud replica Client Noeud Noeud Client replica
  • 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. 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
  • 25. Architecture append-only de Cassandra MemTable RAM Disque Log SSTable
  • 26. Architecture append-only de Cassandra MemTable RAM Disque Log SSTable
  • 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. 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. Le théorème CAP Cassandra BDD relationnelles Consistance Disponibilité Tolérance aux défaillances Impossible
  • 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. Consistance selon nombre de réponses attendues Temps A A A A 4 réplicas
  • 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. 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 A Lecture avec attente de Ecriture avec attente réponse de 2 noeuds d’accusé d’un seul noeud
  • 35. Consistance selon nombre de réponses attendues R+W=N A A A A B B A A B B A A Lecture avec attente de Ecriture avec attente réponse de 2 noeuds d’accusé de 2 noeuds
  • 36. Consistance selon nombre de réponses attendues R+W>N A A A A B B B A B B B A Lecture avec attente de Ecriture avec attente réponse de 3 noeuds d’accusé de 2 noeuds
  • 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. 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. 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é
  • 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. Super-colonnes Les valeurs d’une super-colonne sont des collections de colonnes
  • 43. Un modèle de données peu intuitif...
  • 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. 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. Exemple d’écriture avec Cassandra Cluster 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. Exemple de lecture avec Cassandra SliceQuery<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
  • 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
  • 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
  • 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. Questions / Réponses ? @mfiguiere blog.xebia.fr