5. STOCKAGE DE SESSION
• un site web dynamique
• + RDBM
• lire la session
• la mettre à jour
• faire des analyses
• stockage dans une bdd relationnelle classique
6. PROBLÈME DE PERFORMANCE
• latence: trop de lecture/écriture
• throughput: grosses sessions
• solution, externaliser le stockage des sessions
26. STRUCTURE
INTERNE
• 2 protocoles
• clef-valeur en surface
• distributed computing
• backend clef valeur
• eleveldb et bitcask
distributed system at heart
dynamo model FSMs
riak core
vnode master
k/v vnode
storage engine
client application
httpprotobufs
riak_client
riak core
27. CLEF-VALEUR
• pas de table, pas de relation
• design simple
• bucket, clef, valeur, content-type
• ajout de fonctionnalités facile
• 2i, MapReduce, search, datatypes (CRDTs)
32. VITESSE
• débit élevé et latence faible:
• plusieurs noeuds ont la données
• donnée transite en interne + cache
• lecture configurable
• r=1, …, quorum, all
• n=1,…,quorum, all
33. SCALABILITÉ
• besoin stockage ? + de noeuds
• besoin meilleure latence ? + de noeuds
• besoin throughput en écriture ? + de noeuds
• besoin throughput en lecture ?
• + de noeuds
• n plus grand
35. INSTALLATION
• mac OS X
!
• docker: https://github.com/hectcastro/docker-riak
brew install riak
riak start
DOCKER_RIAK_AUTOMATIC_CLUSTERING=1
DOCKER_RIAK_CLUSTER_SIZE=5
DOCKER_RIAK_BACKEND=leveldb make start-cluster
50. MISE À JOUR DOUBLE
• 1 news avec zero commentaire
• 2 nouveaux commentaires sur la news
• GET1, GET2, SET1, SET2
• GET2: retourne 1 commentaire ( au lieu de 2)
51. RÉSOLUTION CÔTÉ CLIENT
• le client merge les listes d’id, et refait un SET
• GET: 2 listes de valeurs + id du conflit
• merge des listes
• SET de la nouvelle valeur + id du conflit
52. RÉSOLUTION CÔTÉ SERVEUR
• CRDT: Conflict-free replicated data type
• une révolution pour le secteur
• dans Riak: compteur, set, map
54. BUCKET CP
• un bucket en CP au lieu de AP
• exemple: gestion de paiement, finance
• besoin de strong consistency
• Riak permet d’avoir des bucket CP et AP
• révolutionnaire, plus besoin de RDBMs
56. CAS D’UTILISATION
• lister les commentaires d'un user
• lister les commentaires entre 2 dates
• lister les commentaires effacés
• binary index (alphanumeric)
• integer index
57. EXEMPLE
• (demo)
my $r = Riak::Client->new(host=>”localhost",
port=>49159);
$r->put( “user",
damien => { age => 36 },
“application/json",
{ idx_age_int => 36 }
);
my $keys = $r->query_index(
“user", "idx_age_int", [ 20, 50] );