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

54
Cassandra Haute disponibilité et élasticité avec Cassandra 17/06/2011

description

 

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

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

Cassandra

Haute disponibilité et élasticité avec Cassandra

17/06/2011

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

Speaker

Michaël Figuière

@mfiguiere

blog.xebia.fr

Search Engines NoSQL

DistributedArchitectures

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

Cassandra en quelques mots

• Projet Apache, base de données NoSQL, peer to peer, hautement disponible

• Encore en version 0.8

• Approche très différente des bases de données relationnelles

Possibilité de stocker plusieurs To

Mais déjà déployée en production !

Nécessite un peu d’apprentissage...

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

Dynamo et Cassandra

• Faible latence

• Très haute disponibilité

• Scalabilité massive

Objectifs similaires : - Création de Dynamo- Dernier incident majeur en 2004- < 40 min d’indisponibilité par an

- Création de Cassandra- Recherche dans les messages- 500 millions d’utilisateurs

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

SGBDR et scalabilité

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

Comment assurer la scalabilité avec un SGBDR ?

Réplication synchrone ou asynchrone

Mise en oeuvretypique avec MySQL

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

Sharding avec un SGBDR

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

Sharding avec un SGBDR

Sur serveur B

Sur serveur A

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

Sharding avec un SGBDR

Sur serveur B

Sur serveur A

??

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

Sharding avec un SGBDR

Sur serveur B

Sur serveur A

Dénormalisation

Dénormalisation

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

Sharding avec un SGBDR

Sur serveur B

Sur serveur A

Dénormalisation

Dénormalisation

On perd alors beaucoup de l’intérêt du relationnel !

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

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é

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

Une alternative

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

D’une table de hachage à une BDD clé-valeur

Ensemble des cléspartitionnées selon

leur préfixe

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

D’une table de hachage à une BDD clé-valeur

Ensemble des clés

Consistent hashing

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

D’une table de hachage à une BDD clé-valeur

Une partition parinstance

Multiples partitionspar instance

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

L’architecture de Cassandra

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

Organisation des noeuds en anneau

Noeud

Noeud

NoeudNoeud

Noeud

Noeud

ReplicaPartition 1

ReplicaPartition 2

ReplicaPartition N

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

Organisation des noeuds en anneau

Noeud

Noeud

NoeudNoeud

Noeud

Noeud

L’organisation en anneau permet de d’affecter un intervalle à chaque partition, facilitant ainsi les ajouts et suppressions d’instances

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

Interactions Client / Serveur

Client

Client

Client

Client Noeud

Noeud

NoeudNoeud

Noeud

Noeud

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

Interactions Client / Serveur

Client

Client

Client

Client

Noeud

Noeud Noeudreplica

Noeudreplica

?Noeud Noeud

replica

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

Organisation des noeuds en anneau

Client

Client

Client

Client

Noeudreplica

Noeudreplica

Noeudreplica

Agit en tantque proxy

Noeud

Noeud

Noeud

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

Gestion des défaillances

• Mécanisme d’anti-entropie, assurant des réplicas identiques

• Hinted-Handoff stocke les écritures pendant l’absence d’un noeud

Echange des Hash des données entre réplicas

Semblable à une prise de messages

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

Stockage sur disque

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

Architecture append-only de Cassandra

RAM

MemTable

Disque

Log SSTable

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

Architecture append-only de Cassandra

RAM

MemTable

Disque

Log SSTable

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

Que devient ACID ?

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

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

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

Le théorème CAP

Consistance

Disponibilité

Toléranceaux défaillances

Sur ces 3 propriétés,seules 2 sont

réalisablesà la fois

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

Cassandra

Le théorème CAP

Consistance

Disponibilité

Toléranceaux défaillances Impossible

BDD relationnelles

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

Consistance éventuelle

Client

Client

Client

Client

Noeud

Noeud Noeudreplica

Noeudreplica

NoeudNoeudreplica

Transfère les requêtes R/W vers tous les réplicas

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

Consistance selon nombre de réponses attendues

4 réplicas

A A A A

Temps

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

Ecriture avec attented’accusé d’un seul noeud

Consistance selon nombre de réponses attendues

4 réplicas

A A A A

B A A A

Temps

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

Ecriture avec attented’accusé d’un seul noeud

Consistance selon nombre de réponses attendues

R + W < N

Lecture avec attente de réponse de 2 noeuds

4 réplicas

A A A A

B A A A

B A A A

Temps

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

Consistance selon nombre de réponses attendues

R + W = N

Ecriture avec attented’accusé de 2 noeuds

Lecture avec attente de réponse de 2 noeuds

A A A A

B B A A

B B A A

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

Consistance selon nombre de réponses attendues

R + W > N

Ecriture avec attented’accusé de 2 noeuds

Lecture avec attente de réponse de 3 noeuds

A A A A

B B B A

B B B A

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

Consistance apparente pour le client

Client

Client

Client

Client

Noeud

Noeud Noeudreplica

Noeudreplica

NoeudNoeudreplica

Transfère les requêtes R/W vers tous les réplicas

1

2

2

2

3

3

3

4

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

Atomicité et Isolation

• Les données ne sont plus co-localisées

• Les transactions distribuées nuiraient à la disponibilité et aux performances

• Atomicité et Isolation par opération sur une clé

Localisation non prédictible dans le temps

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

Durabilité

• Ecriture sur un ou plusieurs disques

• Ecriture multiples en mémoire

• En mémoire avec écriture asynchrone sur disque

La réplication permet de renforcer la durabilité

La réplication apporte la durabilité

Pas de durabilité

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

Modèle de données

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

Le modèle en famille de colonnes

BDD relationnelle BDD orientée colonnes

A chaque ID de ligne correspond une liste de couples clé-valeur

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

Super-colonnes

Les valeurs d’une super-colonne sont des collections de

colonnes

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

Un modèle de données peu intuitif...

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

Exemple avec un panier d’achat

17:21 Iphone 17:32 DVD Player 17:44 MacBookjohndoe

6:10 Camera 8:29 Ipadwillsmith

14:45 PlayStation 15:01 Asus EEE 15:03 Iphonepitdavis

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

APIs disponibles

• Cassandra est accédé par Thrift, un RPC développé par Facebook

• Hector est un client de haut niveau pour Java

• PhpCassa est un client pour PHP, PyCassa est un client pour python

Thrift est disponible pour les principaux langages

Offre un mapping de type JPA

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

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 uneShoppingCartColumnFamily

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

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

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

Un cas d’usage

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

Un site de e-commerce

Application

Solr

MySQL

Cassandra

Memcached

Recherche desproduits

Stockage de données de sessions

Stockage du catalogue produits

Stockage des comptes clients

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

Cassandra en production

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

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

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

DataStax OpsCenter

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

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 !

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

Questions / Réponses

?@mfiguiere

blog.xebia.fr