SlideShare une entreprise Scribd logo
1  sur  61
Télécharger pour lire hors ligne
INTRODUCTION À RIAK
Damien Krotkine
À PROPOS
• Ingénieur chez booking.com 	

• BigData, systèmes distribués	

• Backend
Damien Krotkine
RIAK EST…
• une base de donnée	

• open source	

• distribuée	

• clef-valeur	

• masterless	

• haute disponibilité	

• scalable	

• tolérante aux pannes	

• hybride
PROBLÉMATIQUE
STOCKAGE DE SESSION
• un site web dynamique	

• + RDBM	

• lire la session	

• la mettre à jour	

• faire des analyses	

• stockage dans une bdd relationnelle classique
PROBLÈME DE PERFORMANCE
• latence: trop de lecture/écriture 	

• throughput: grosses sessions	

• solution, externaliser le stockage des sessions
SOLUTIONS POSSIBLES
OPTIMISATIONSTRIVIALES
• améliorer le code métier	

• optimiser la config BDD	

• améliorer le hardware	

• solutions limitées et très couteuses
RÉPLICATION
• un master	

• plusieurs slaves	

• lecture sur slaves	

• problèmes quand trop d’écritures
SHARDING
• perte de machine = perte de donnée	

• problème lors d’ajout/retrait de noeuds
SHARDING + REPLICATION
• complexe à gérer	

• masters sont des SPOF	

• nécessité d'avoir des doublures de masters	

• grande complexité
CACHING
• gain en lecture	

• pas de gain en écriture, synchro, invalidation
SOLUTION RETENUE
CLUSTERING
• hardware pas cher	

• masterless	

• auto sharding/replication	

• répartition CPU/réseau	

• distributed computing
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
DYNAMO PAPER
• 2007 par amazon 	

• décrit des techniques	

• Riak est une implémentation
LE PROBLÈME DE LA
COHÉRENCE
LES PARTITIONS RÉSEAU
plusieurs états du monde simultanée
CAPTHEOREM
• Eric Brewer	

• Cohérence forte,	

• Disponibilité,	

• tolérance aux Partitions	

• 2 sur les 3
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
CAPTHEOREM
• mauvaise représentation	

• la C,A, P ne sont pas binaires
RIAK, HYBRIDE
• Riak est une base hybride	

• AP par défaut et historiquement	

• CP si besoin (version 2)	

• configuration par bucket (namespace)
RIAK
RIAK EST UN RING
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
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)
ROBUSTESSE
• donnée répliquée, n = 3 par défaut	

• partage d'état (gossip)
DISASTER RECOVERY
• hinted handoffs	

• Anti-Entropy
FACILITÉ
• masterless	

• un seul fichier de configuration	

• redémarrage en cascade	

• redémarrage à chaud	

• riak control	

• métriques de diagnostiques
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”
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
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
DEMO
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
CLIENTS RIAK
• officiels: Erlang, Java, Python	

• communautaires: tous les langages
QUELLE API
• http REST: pratique, web	

• ProtoBuf: simple, rapide
SET/GET
• set / get en Curl	

• (demo)
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);
BUCKETS
• liste des buckets	

• liste des clefs d’un bucket	

• propriété des bucket	

• (demo buckets)
REKON
• API Rest => client javascript => navigateur	

• (demo Rekon)
RIAK CONTROL
• aperçu du cluster	

• ajout d’une machine riak@172.17.0.9	

• (demo riak control)
DESIGN DE DONNÉES
CAS D’UTILISATION
• un site web d’actualités	

• des “news”	

• des commentaires associés aux news	

• des utilisateurs
DESIGN DES DONNÉES
• news: news_id, [ comment_id ]	

• commentaire: comment_id, user_id, news_id, texte	

• user: id
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
COMMENTAIRES
• ajout d’un commentaire	

• SET comments/01, { news_id, user_id, content }	

• GET news/42, append à la liste	

• SET news/42 [ … 01 ]
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};
}
LES CONFLITS
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)
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
RÉSOLUTION CÔTÉ SERVEUR
• CRDT: Conflict-free replicated data type	

• une révolution pour le secteur	

• dans Riak: compteur, set, map
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"}}'
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
INDEX SECONDAIRES
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
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] );
FONCTIONS AVANCÉES
FONCTIONS AVANCÉES
• map reduce	

• javascript, erlang	

• search full text	

• basé sur lucene	

• riak cs	

• riak enterprise	

• multi-dc
CONCLUSION
• Riak idéal pour l’IT modulaire	

• une boîte à outil pour de la performance	

• la plus robuste des solutions NoSQL
QUESTIONS ?

Contenu connexe

Tendances

Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Saïd Bouras
 
Paris Kafka Meetup - Concepts & Architecture
Paris Kafka Meetup - Concepts & ArchitectureParis Kafka Meetup - Concepts & Architecture
Paris Kafka Meetup - Concepts & ArchitectureFlorian Hussonnois
 
Kafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User GroupKafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User GroupHervé Rivière
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandraDuyhai Doan
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysVictor Coustenoble
 
Big Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostBig Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostAlexander DEJANOVSKI
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerJean-Baptiste Claramonte
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Duyhai Doan
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchMourad DACHRAOUI
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KJulien Anguenot
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantALTIC Altic
 
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraDataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraVictor Coustenoble
 
Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Victor Coustenoble
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à CassandraVMware Tanzu
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache ZookeeperMichaël Morello
 
Stream processing avec Apache Pulsar
Stream processing avec Apache PulsarStream processing avec Apache Pulsar
Stream processing avec Apache PulsarBruno Bonnin
 
Consolidez vos journaux et vos métriques avec Elastic Beats
Consolidez vos journaux et vos métriques avec Elastic BeatsConsolidez vos journaux et vos métriques avec Elastic Beats
Consolidez vos journaux et vos métriques avec Elastic Beatsgcatt
 

Tendances (20)

Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017
 
Paris Kafka Meetup - Concepts & Architecture
Paris Kafka Meetup - Concepts & ArchitectureParis Kafka Meetup - Concepts & Architecture
Paris Kafka Meetup - Concepts & Architecture
 
Kafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User GroupKafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User Group
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandra
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft Techdays
 
Big Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostBig Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez Chronopost
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration Docker
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.K
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performant
 
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraDataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
 
Webinar Degetel DataStax
Webinar Degetel DataStaxWebinar Degetel DataStax
Webinar Degetel DataStax
 
Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à Cassandra
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache Zookeeper
 
Stream processing avec Apache Pulsar
Stream processing avec Apache PulsarStream processing avec Apache Pulsar
Stream processing avec Apache Pulsar
 
Consolidez vos journaux et vos métriques avec Elastic Beats
Consolidez vos journaux et vos métriques avec Elastic BeatsConsolidez vos journaux et vos métriques avec Elastic Beats
Consolidez vos journaux et vos métriques avec Elastic Beats
 

En vedette

20150121 basho introduction at ipp event
20150121 basho introduction at ipp event20150121 basho introduction at ipp event
20150121 basho introduction at ipp eventEmmanuel Marchal
 
Reuniones en la nube como apoyo a la Educacion
Reuniones en la nube como apoyo a la EducacionReuniones en la nube como apoyo a la Educacion
Reuniones en la nube como apoyo a la EducacionSalvador Gallardo
 
Trabajo eva garcía 6ºa
Trabajo eva garcía 6ºaTrabajo eva garcía 6ºa
Trabajo eva garcía 6ºajlealleon
 
Les encadrés
Les encadrésLes encadrés
Les encadrésjlealleon
 
Densitevolumemass
DensitevolumemassDensitevolumemass
Densitevolumemassmllemarin38
 
13 semillas-de-conocimiento-tolteca
13 semillas-de-conocimiento-tolteca13 semillas-de-conocimiento-tolteca
13 semillas-de-conocimiento-toltecaAdalberto
 
Festivales artisticos de educacion parvularia
Festivales artisticos de educacion parvulariaFestivales artisticos de educacion parvularia
Festivales artisticos de educacion parvulariaAdalberto
 
2011 activides pulacho
2011  activides pulacho2011  activides pulacho
2011 activides pulachoAdalberto
 
Analyse du domaine_de_la_restauration_fiche_danalyse_vr
Analyse du domaine_de_la_restauration_fiche_danalyse_vrAnalyse du domaine_de_la_restauration_fiche_danalyse_vr
Analyse du domaine_de_la_restauration_fiche_danalyse_vrmikyfre
 
Ejemplopeivictor 090408095344-phpapp02
Ejemplopeivictor 090408095344-phpapp02Ejemplopeivictor 090408095344-phpapp02
Ejemplopeivictor 090408095344-phpapp02Adalberto
 
Compu training replay
Compu training replayCompu training replay
Compu training replaynguyenda
 
Jean Rohmer Big data & risque de fraude
Jean Rohmer Big data & risque de fraudeJean Rohmer Big data & risque de fraude
Jean Rohmer Big data & risque de fraudeInsurance_Marketing
 
Bicentenario pra educación plan de trabajo
Bicentenario pra educación plan de trabajoBicentenario pra educación plan de trabajo
Bicentenario pra educación plan de trabajoAdalberto
 
Cuestionario maestros
Cuestionario maestrosCuestionario maestros
Cuestionario maestrosAdalberto
 

En vedette (20)

20150121 basho introduction at ipp event
20150121 basho introduction at ipp event20150121 basho introduction at ipp event
20150121 basho introduction at ipp event
 
La classification des animaux
La classification des animauxLa classification des animaux
La classification des animaux
 
Reuniones en la nube como apoyo a la Educacion
Reuniones en la nube como apoyo a la EducacionReuniones en la nube como apoyo a la Educacion
Reuniones en la nube como apoyo a la Educacion
 
Trabajo eva garcía 6ºa
Trabajo eva garcía 6ºaTrabajo eva garcía 6ºa
Trabajo eva garcía 6ºa
 
Issue 1
Issue 1Issue 1
Issue 1
 
Les encadrés
Les encadrésLes encadrés
Les encadrés
 
Densitevolumemass
DensitevolumemassDensitevolumemass
Densitevolumemass
 
13 semillas-de-conocimiento-tolteca
13 semillas-de-conocimiento-tolteca13 semillas-de-conocimiento-tolteca
13 semillas-de-conocimiento-tolteca
 
Festivales artisticos de educacion parvularia
Festivales artisticos de educacion parvulariaFestivales artisticos de educacion parvularia
Festivales artisticos de educacion parvularia
 
E réputation
E réputationE réputation
E réputation
 
2011 activides pulacho
2011  activides pulacho2011  activides pulacho
2011 activides pulacho
 
Analyse du domaine_de_la_restauration_fiche_danalyse_vr
Analyse du domaine_de_la_restauration_fiche_danalyse_vrAnalyse du domaine_de_la_restauration_fiche_danalyse_vr
Analyse du domaine_de_la_restauration_fiche_danalyse_vr
 
Plan social media
Plan social mediaPlan social media
Plan social media
 
Ejemplopeivictor 090408095344-phpapp02
Ejemplopeivictor 090408095344-phpapp02Ejemplopeivictor 090408095344-phpapp02
Ejemplopeivictor 090408095344-phpapp02
 
Compu training replay
Compu training replayCompu training replay
Compu training replay
 
Jean Rohmer Big data & risque de fraude
Jean Rohmer Big data & risque de fraudeJean Rohmer Big data & risque de fraude
Jean Rohmer Big data & risque de fraude
 
Bicentenario pra educación plan de trabajo
Bicentenario pra educación plan de trabajoBicentenario pra educación plan de trabajo
Bicentenario pra educación plan de trabajo
 
Cuestionario maestros
Cuestionario maestrosCuestionario maestros
Cuestionario maestros
 
Delicious
DeliciousDelicious
Delicious
 
Etre Chats
Etre ChatsEtre Chats
Etre Chats
 

Similaire à Riak introduction

Comment reprendre un (gros) projet Ruby on Rails
Comment reprendre un (gros) projet Ruby on RailsComment reprendre un (gros) projet Ruby on Rails
Comment reprendre un (gros) projet Ruby on RailsNovelys
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeMustapha Tachouct
 
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Modern Data Stack France
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaMicrosoft
 
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Christophe Laporte
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlCodizy
 
Construire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPConstruire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPClément OUDOT
 
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...Cédrick Lunven
 
Tutojres 13-jeromefenal
Tutojres 13-jeromefenalTutojres 13-jeromefenal
Tutojres 13-jeromefenalinf_med13
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCChristophe Villeneuve
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeBenoit Fillon
 
Zimbra Forum France 2016 - Beezim and Ceph
Zimbra Forum France 2016 - Beezim and CephZimbra Forum France 2016 - Beezim and Ceph
Zimbra Forum France 2016 - Beezim and CephZimbra
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.xDr Hajji Hicham
 

Similaire à Riak introduction (20)

Comment reprendre un (gros) projet Ruby on Rails
Comment reprendre un (gros) projet Ruby on RailsComment reprendre un (gros) projet Ruby on Rails
Comment reprendre un (gros) projet Ruby on Rails
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
 
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
 
Soutenance ysance
Soutenance ysanceSoutenance ysance
Soutenance ysance
 
NoSQL et Big Data
NoSQL et Big DataNoSQL et Big Data
NoSQL et Big Data
 
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysql
 
Construire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPConstruire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAP
 
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Tutojres 13-jeromefenal
Tutojres 13-jeromefenalTutojres 13-jeromefenal
Tutojres 13-jeromefenal
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React Native
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
Zimbra Forum France 2016 - Beezim and Ceph
Zimbra Forum France 2016 - Beezim and CephZimbra Forum France 2016 - Beezim and Ceph
Zimbra Forum France 2016 - Beezim and Ceph
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.x
 
YaJUG - Spring 3.0
YaJUG - Spring 3.0YaJUG - Spring 3.0
YaJUG - Spring 3.0
 

Riak introduction

  • 2. À PROPOS • Ingénieur chez booking.com • BigData, systèmes distribués • Backend Damien Krotkine
  • 3. RIAK EST… • une base de donnée • open source • distribuée • clef-valeur • masterless • haute disponibilité • scalable • tolérante aux pannes • hybride
  • 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
  • 8. OPTIMISATIONSTRIVIALES • améliorer le code métier • optimiser la config BDD • améliorer le hardware • solutions limitées et très couteuses
  • 9. RÉPLICATION • un master • plusieurs slaves • lecture sur slaves • problèmes quand trop d’écritures
  • 10. SHARDING • perte de machine = perte de donnée • problème lors d’ajout/retrait de noeuds
  • 11. SHARDING + REPLICATION • complexe à gérer • masters sont des SPOF • nécessité d'avoir des doublures de masters • grande complexité
  • 12. CACHING • gain en lecture • pas de gain en écriture, synchro, invalidation
  • 14. CLUSTERING • hardware pas cher • masterless • auto sharding/replication • répartition CPU/réseau • distributed computing
  • 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. DYNAMO PAPER • 2007 par amazon • décrit des techniques • Riak est une implémentation
  • 17. LE PROBLÈME DE LA COHÉRENCE
  • 18. LES PARTITIONS RÉSEAU plusieurs états du monde simultanée
  • 19. CAPTHEOREM • Eric Brewer • Cohérence forte, • Disponibilité, • tolérance aux Partitions • 2 sur les 3
  • 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. CAPTHEOREM • mauvaise représentation • la C,A, P ne sont pas binaires
  • 22. RIAK, HYBRIDE • Riak est une base hybride • AP par défaut et historiquement • CP si besoin (version 2) • configuration par bucket (namespace)
  • 23. RIAK
  • 24. RIAK EST UN RING
  • 25.
  • 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)
  • 28. ROBUSTESSE • donnée répliquée, n = 3 par défaut • partage d'état (gossip)
  • 29. DISASTER RECOVERY • hinted handoffs • Anti-Entropy
  • 30. FACILITÉ • masterless • un seul fichier de configuration • redémarrage en cascade • redémarrage à chaud • riak control • métriques de diagnostiques
  • 31. 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”
  • 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
  • 34. DEMO
  • 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
  • 36. CLIENTS RIAK • officiels: Erlang, Java, Python • communautaires: tous les langages
  • 37. QUELLE API • http REST: pratique, web • ProtoBuf: simple, rapide
  • 38. SET/GET • set / get en Curl • (demo)
  • 39. 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);
  • 40. BUCKETS • liste des buckets • liste des clefs d’un bucket • propriété des bucket • (demo buckets)
  • 41. REKON • API Rest => client javascript => navigateur • (demo Rekon)
  • 42. RIAK CONTROL • aperçu du cluster • ajout d’une machine riak@172.17.0.9 • (demo riak control)
  • 44. CAS D’UTILISATION • un site web d’actualités • des “news” • des commentaires associés aux news • des utilisateurs
  • 45. DESIGN DES DONNÉES • news: news_id, [ comment_id ] • commentaire: comment_id, user_id, news_id, texte • user: id
  • 46. 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
  • 47. COMMENTAIRES • ajout d’un commentaire • SET comments/01, { news_id, user_id, content } • GET news/42, append à la liste • SET news/42 [ … 01 ]
  • 48. 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}; }
  • 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
  • 53. 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"}}'
  • 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] );
  • 59. FONCTIONS AVANCÉES • map reduce • javascript, erlang • search full text • basé sur lucene • riak cs • riak enterprise • multi-dc
  • 60. CONCLUSION • Riak idéal pour l’IT modulaire • une boîte à outil pour de la performance • la plus robuste des solutions NoSQL