Riak introduction

1 880 vues

Publié le

Introduction to Riak, in french.

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

Aucun téléchargement
Vues
Nombre de vues
1 880
Sur SlideShare
0
Issues des intégrations
0
Intégrations
607
Actions
Partages
0
Téléchargements
19
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Riak introduction

  1. 1. INTRODUCTION À RIAK Damien Krotkine
  2. 2. À PROPOS • Ingénieur chez booking.com • BigData, systèmes distribués • Backend Damien Krotkine
  3. 3. RIAK EST… • une base de donnée • open source • distribuée • clef-valeur • masterless • haute disponibilité • scalable • tolérante aux pannes • hybride
  4. 4. PROBLÉMATIQUE
  5. 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. 6. PROBLÈME DE PERFORMANCE • latence: trop de lecture/écriture • throughput: grosses sessions • solution, externaliser le stockage des sessions
  7. 7. SOLUTIONS POSSIBLES
  8. 8. OPTIMISATIONSTRIVIALES • améliorer le code métier • optimiser la config BDD • améliorer le hardware • solutions limitées et très couteuses
  9. 9. RÉPLICATION • un master • plusieurs slaves • lecture sur slaves • problèmes quand trop d’écritures
  10. 10. SHARDING • perte de machine = perte de donnée • problème lors d’ajout/retrait de noeuds
  11. 11. SHARDING + REPLICATION • complexe à gérer • masters sont des SPOF • nécessité d'avoir des doublures de masters • grande complexité
  12. 12. CACHING • gain en lecture • pas de gain en écriture, synchro, invalidation
  13. 13. SOLUTION RETENUE
  14. 14. CLUSTERING • hardware pas cher • masterless • auto sharding/replication • répartition CPU/réseau • distributed computing
  15. 15. PROPRIÉTÉS DÉSIRÉES • robustesse: pouvoir perdre des noeuds • facilité d'administration et configuration • sécurité: écriture pérenne • vitesse: haut débit (throughput) • vitesse: faible latence (latency) • stockage en quantité • scalabilité • cohérence (consistency): écriture puis lecture
  16. 16. DYNAMO PAPER • 2007 par amazon • décrit des techniques • Riak est une implémentation
  17. 17. LE PROBLÈME DE LA COHÉRENCE
  18. 18. LES PARTITIONS RÉSEAU plusieurs états du monde simultanée
  19. 19. CAPTHEOREM • Eric Brewer • Cohérence forte, • Disponibilité, • tolérance aux Partitions • 2 sur les 3
  20. 20. Partitioning Tolérance aux partitions réseaux Availability les clients peuvent lire et écrire Strong Consistency Une seule vision des données CA AP CP Impossible
  21. 21. CAPTHEOREM • mauvaise représentation • la C,A, P ne sont pas binaires
  22. 22. RIAK, HYBRIDE • Riak est une base hybride • AP par défaut et historiquement • CP si besoin (version 2) • configuration par bucket (namespace)
  23. 23. RIAK
  24. 24. RIAK EST UN RING
  25. 25. 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
  26. 26. 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)
  27. 27. ROBUSTESSE • donnée répliquée, n = 3 par défaut • partage d'état (gossip)
  28. 28. DISASTER RECOVERY • hinted handoffs • Anti-Entropy
  29. 29. FACILITÉ • masterless • un seul fichier de configuration • redémarrage en cascade • redémarrage à chaud • riak control • métriques de diagnostiques
  30. 30. SÉCURITÉ • garantie d’écriture variable • fire & forget: w=0 dw=0 pw=0 • quorum: w=2 dw=0 pw=0 • durabilité: w=2, dw=1, pw=1 • durabilité maximale: w=3, dw=3, pw=3 • entier ou “quorum”,“all”
  31. 31. 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
  32. 32. 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
  33. 33. DEMO
  34. 34. 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
  35. 35. CLIENTS RIAK • officiels: Erlang, Java, Python • communautaires: tous les langages
  36. 36. QUELLE API • http REST: pratique, web • ProtoBuf: simple, rapide
  37. 37. SET/GET • set / get en Curl • (demo)
  38. 38. SET/GET Namespace ns = new Namespace("default", "my_bucket"); Location location = new Location(ns, "my_key"); RiakObject riakObject = new RiakObject(); riakObject.setValue(BinaryValue.create("my_value")); StoreValue store = new StoreValue.Builder(riakObject) .withLocation(location) .withOption(Option.W, new Quorum(3)).build(); client.execute(store); Namespace ns = new Namespace("default","my_bucket"); Location location = new Location(ns, "my_key"); FetchValue fv = new FetchValue.Builder(location).build(); FetchValue.Response response = client.execute(fv); RiakObject obj = response.getValue(RiakObject.class);
  39. 39. BUCKETS • liste des buckets • liste des clefs d’un bucket • propriété des bucket • (demo buckets)
  40. 40. REKON • API Rest => client javascript => navigateur • (demo Rekon)
  41. 41. RIAK CONTROL • aperçu du cluster • ajout d’une machine riak@172.17.0.9 • (demo riak control)
  42. 42. DESIGN DE DONNÉES
  43. 43. CAS D’UTILISATION • un site web d’actualités • des “news” • des commentaires associés aux news • des utilisateurs
  44. 44. DESIGN DES DONNÉES • news: news_id, [ comment_id ] • commentaire: comment_id, user_id, news_id, texte • user: id
  45. 45. NEWS • ajout d’une news: SET news/42 [ ] • affichage d’une news http://site.com/news/42.html • GET news/42 retourne une liste d’id • GET comment/id
  46. 46. COMMENTAIRES • ajout d’un commentaire • SET comments/01, { news_id, user_id, content } • GET news/42, append à la liste • SET news/42 [ … 01 ]
  47. 47. DEMO • ajout de news, commentaires (demo) • utilisation: my $r = Riak::Client->new(host=>”localhost", port=>49159); my $news = $r->get(news => 42); foreach (@$news) { say $r->get(comment => $_)->{content}; }
  48. 48. LES CONFLITS
  49. 49. 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)
  50. 50. 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
  51. 51. RÉSOLUTION CÔTÉ SERVEUR • CRDT: Conflict-free replicated data type • une révolution pour le secteur • dans Riak: compteur, set, map
  52. 52. CRDT SET curl -XPOST http://localhost:49160/types/sets/buckets/ news_comments/datatypes/42 -H "Content-Type: application/json" -d '{"add_all":[1,2]}' ! curl -XPOST http://localhost:49160/types/sets/buckets/ news_comments/datatypes/42 -H "Content-Type: application/json" -d '{"remove":[3]}' riak-admin bucket-type create news '{"props": {"datatype":"set"}}'
  53. 53. 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
  54. 54. INDEX SECONDAIRES
  55. 55. 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
  56. 56. 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] );
  57. 57. FONCTIONS AVANCÉES
  58. 58. FONCTIONS AVANCÉES • map reduce • javascript, erlang • search full text • basé sur lucene • riak cs • riak enterprise • multi-dc
  59. 59. CONCLUSION • Riak idéal pour l’IT modulaire • une boîte à outil pour de la performance • la plus robuste des solutions NoSQL
  60. 60. QUESTIONS ?

×