SlideShare une entreprise Scribd logo
Utilisation de Couchbase
pour le ciblage publicitaire

Cédric Pessan
Mickaël Le Baillif

Couchbase Meetup {"Number" :1}
21 novembre 2013
Ce que nous allons voir ensemble...
●

●

●

Hi-Media : aperçu de la société et de ses
activités
Ciblage publicitaire : à quoi ça sert, comment
ça marche ?
Notre utilisation de Couchbase
–

Place au sein de notre architecture

–

Connexions avec nos modules métiers

–

Interaction avec PostgreSQL

Couchbase Meetup {"Number" :1}
21 novembre 2013
Présentation
institutionnelle d'Hi-Media

Couchbase Meetup {"Number" :1}
21 novembre 2013
Hi-Media en chiffres
500 personnes dont 100 ingénieurs IT
●
Bureaux IT à Paris et à Nantes
●

Couchbase Meetup {"Number" :1}
21 novembre 2013
Les métiers d'Hi-Media
Publicité

Création et
hébergement de
sites

Couchbase Meetup {"Number" :1}
21 novembre 2013

Paiement et
micro-paiement
Le retargeting produit

Couchbase Meetup {"Number" :1}
21 novembre 2013
Objectif du retargeting produit
●

●

Visite d'un site
marchand : « tracking »
de l'activité d'un
internaute
Visite d'un site tiers :
mise en valeur des
articles recherchés et
recommandés dans des
bannières publicitaires

Couchbase Meetup {"Number" :1}
21 novembre 2013
Phase de tracking 1/2
http://himedia/tracking
Annonceur : nn
Site : mm
Action : fiche produit
Ref produit : rr-vv-pp

Cookie : uid=AE23DF34

Couchbase Meetup {"Number" :1}
21 novembre 2013
Phase de tracking 2/2
Serveur web

http://himedia/tracking

NginX
Module
métier
« tracking »

Moteur de
recommandation

Validation
format URL
+
Envoi msg
queue

Couchbase Meetup {"Number" :1}
21 novembre 2013

Annonceur : nn
Site : mm
Action : fiche produit
Ref produit : rr-vv-pp

Cookie : uid=AE23DF34

NginX

HTTP 200 OK
Asynchrone : stockage du tracking
uid=AE23DF34
Action 1
Action 2

uid=AE23DF34
Annonceur : nn
Site : mm
Action : fiche produit
Ref produit : rr-vv-pp

Msg queue

Moteur de
recommandation
Mise à jour de l'historique
+
Invalidation cache
uid=AE23DF34
Action 1
Action 2
Action 3

Couchbase Meetup {"Number" :1}
21 novembre 2013
Phase d'affichage de publicité
Serveur web
Cache ?

Module
métier
« display »

Couchbase
Mise en
cache

e
l liv
cu
Cal

Moteur de
recommandation

Couchbase Meetup {"Number" :1}
21 novembre 2013

NginX

NginX

uid=AE23DF34

HTTP 200 OK
envoi bannière pub
Notre utilisation de
Couchbase

Couchbase Meetup {"Number" :1}
21 novembre 2013
Quelques chiffres
●

7 buckets, pour séparation logique des
données et besoins distincts de réplication

●

80 Go de données en RAM sans les réplicas

●

100 millions de clés

●

Réplication XDCR unidirectionnelle vers
cluster en hot standby

Couchbase Meetup {"Number" :1}
21 novembre 2013
NoSQL : pourquoi Couchbase ?
●

Redimensionnement horizontal très aisé, idéal pour
suivre l'évolution de nos volumétries

●

●

●

Expériences précédentes avec memcached
On a débuté avec membase, pas besoin de NoSQL
orientés documents
Besoin de temps de réponse très courts pour des
données précalculées ou mises en cache

●

Sécurisation des données par réplication

●

Tolérance aux pannes pour haute disponibilité

Couchbase Meetup {"Number" :1}
21 novembre 2013
Protocole
●

●

Besoin d'un protocole adapté à notre boucle
événementielle C++ boost::asio
Utilisation du protocole ASCII de memcached
–

get, gets, set, cas, incr, decr

–

Formattage des messages et parsing des réponses
très simple à implémenter

–

Envoi/réception des messages sans passer par une
bibliothèque externe, utilise directement
boost::asio

Couchbase Meetup {"Number" :1}
21 novembre 2013
Protocole
●

En python, également protocole ASCII couplé
à eventlet pour l'événementiel
–

À essayer : version 1.1.0 de la lib
couchbase-python-client qui expérimente la
délégation des I/O de libcouchbase (en C) par
Python/gevent ou Python/Twisted

–

Overhead pour établir une connexion REST
(management channel) + 100 connexions data sur
des sessions de courtes durées (<10s) vs 100
connexions TCP sans contexte d'init à parser

Couchbase Meetup {"Number" :1}
21 novembre 2013
Gestion des connexions
●

Modèle événementiel : nombreuses requêtes
métiers traitées simultanément
–

●
●

Plusieurs requêtes couchbase simultanées

Une requête couchbase = une connexion TCP
Utilisation d'un pool de connexion vers chaque
bucket : environ 100 connexions par processus

Couchbase Meetup {"Number" :1}
21 novembre 2013
Gestion des connexions
●

Protocole ASCII simple : aucune notion de nœuds,
typologie, vbucket, etc.

●

Connexion des modules métiers vers des moxis

●

Un bucket = un moxi

●

●

Chaque machine a ses moxis en local, centaines de
connexions entrantes (upstream)
Moxi établit les connexions vers les nœuds Couchbase
(downstream) en s'adaptant à la typologie, dispatche
les requêtes vers les nœuds responsables des données

Couchbase Meetup {"Number" :1}
21 novembre 2013
Gestion des connexions
●

Utilisation du gold-standard recommandé par
Couchbase(1) :
–

Chaque moxi se connecte vers un haproxy local

–

Conf haproxy liste tous les nœuds :
●
●

–

cluster couchbase principal
cluster couchbase de backup si aucun nœud du cluster
principal n'est joignable

Les connexions des moxis sont réparties
équitablement vers l'ensemble des nœuds
opérationnels
(1) http://docs.couchbase.com/moxi-manual-1.8/#moxi-standalone

Couchbase Meetup {"Number" :1}
21 novembre 2013
Gestion des connexions
Serveur A

moxis
upstream

bucket A
bucket B
bucket C

downstream

x100

Module
métier

x100
x100

REST

haproxy
Couchbase Meetup {"Number" :1}
21 novembre 2013

Cluster Couchbase
2 nœuds
3 buckets
Interactions entre modules
HTTP
NginX

Module
métier C++

libmemcacheasio (3) + boost::asio

)
(1

Q
PZ

Module
métier C++

M
/0
)
(2

Q

Module
métier C++

CSV/XML

Catalogues
annonceur

memcache_client(4) + eventlet
Modules métier
Python
(1) https://github.com/mkoppanen/pzq
(2) http://www.zeromq.org
(3) https://code.google.com/p/memcacheasio/
(4) https://github.com/mixpanel/memcache_client

Couchbase Meetup {"Number" :1}
21 novembre 2013
Interactions entre modules
HTTP
NginX

Module
métier C++
Q
PZ

Module
métier C++

moxi

haproxy

M
/0
Q

Module
métier C++

CSV/XML

Catalogues
annonceur

Modules métier
Python

Couchbase Meetup {"Number" :1}
21 novembre 2013

moxi
haproxy
Interactions entre modules
HTTP
NginX

Module
métier C++
Q
PZ

Module
métier C++
M
/0
Q

Module
métier C++
Ligne de commande

CSV/XML

Catalogues
annonceur

Modules métier
Python
Interface IHM
PHP

Couchbase Meetup {"Number" :1}
21 novembre 2013
PostgreSQL vs Couchbase
●

Requêtes PG pour calcul des liens entre
produits d'un catalogue
–

●

●

●

Catégories, prix, etc.

Requêtes trop lentes pour être utilisées « en
live » lors d'un affichage de publicité
Pré-calcul des données et stockage dans
Couchbase
Mis à jour lors d'un import de catalogue

Couchbase Meetup {"Number" :1}
21 novembre 2013
Remplissage de Couchbase
●

●

●

●

Dépend des buckets
Historique internautes : par consommation sur queue de
messages
Statistiques : incréments lors du traitement des requêtes
HTTP
Cache d'affichage : à la volée lors du traitement d'une
requête HTTP
–
–

●

RAZ par TTL
RAZ si historique change ou catalogue mis à jour

Catalogues : chaînes d'import

Couchbase Meetup {"Number" :1}
21 novembre 2013
Exemple : PostgreSQL vers Couchbase
Script Python
Worker
CB
Distribution
sur queue
PostgreSQL

Worker
CB
Worker
CB

Cluster
Couchbase

Couchbase Meetup {"Number" :1}
21 novembre 2013
Exemple : PostgreSQL vers Couchbase

Retrouvez ce code source commenté sur :
https://gist.github.com/demikl/7559175
Couchbase Meetup {"Number" :1}
21 novembre 2013
Questions à creuser...
●

Crash des moxis observé sous forte charge
(20.000 set/s) si on augmente le nombre de downstreams (16
par nœud et par thread vs. 4 par défaut)

●

Vues couchbase :
–
–

●

délai de mise à jour des index
Flag disponible pour savoir si l'index est à jour ?

Répli XDCR bidirectionnelle :
–

mutations en boucle : MAJ clé sur cluster A, répliqué
sur cluster B, répliqué sur cluster A, ...

–

Certaines clés/valeurs sont refusées :
« invalid_json, […] lexical error: invalid bytes in UTF8 string »

Couchbase Meetup {"Number" :1}
21 novembre 2013
Contacts
support.adtools.fr@hi-media.com

Cédric Pessan
Mickaël Le Baillif

@demikl

Retrouvez cette présentation sur :
http://bit.ly/1awgBBk

Couchbase Meetup {"Number" :1}
21 novembre 2013

Contenu connexe

Tendances

Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
MSDEVMTL
 
Jss 2015 - Microsoft Stream analytics
Jss 2015 -  Microsoft Stream analyticsJss 2015 -  Microsoft Stream analytics
Jss 2015 - Microsoft Stream analytics
Georges Damien
 
DataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudDataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le Cloud
Victor Coustenoble
 
Meetup Google Cloud
Meetup Google CloudMeetup Google Cloud
Meetup Google Cloud
Pierre Coste
 
J1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric CharlierJ1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric Charlier
MS Cloud Summit
 
Les nouveautés de MongoDB 3.6
Les nouveautés de MongoDB 3.6Les nouveautés de MongoDB 3.6
Les nouveautés de MongoDB 3.6MongoDB
 
Zenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_mlZenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_ml
Zenika
 
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
Victor Coustenoble
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
GUSS
 
Delta Lake, un vernis pour parquet
Delta Lake, un vernis pour parquetDelta Lake, un vernis pour parquet
Delta Lake, un vernis pour parquet
Alban Phélip
 
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
Victor Coustenoble
 
Meetup Google Cloud Bigquery
Meetup Google Cloud Bigquery Meetup Google Cloud Bigquery
Meetup Google Cloud Bigquery
Pierre Coste
 
[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosql[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosql
GUSS
 
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
MongoDB
 
Meetup Google Cloud
Meetup Google CloudMeetup Google Cloud
Meetup Google Cloud
Pierre Coste
 
GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)
Neo4j
 
Architecture d’une app qui fait 5 millions de visites par mois
Architecture d’une app qui fait 5 millions de visites par moisArchitecture d’une app qui fait 5 millions de visites par mois
Architecture d’une app qui fait 5 millions de visites par mois
Julien Carnelos
 
HTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréHTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien Landuré
Zenika
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
OVHcloud
 
myLittleAdmin and myLittleBackup Presentation
myLittleAdmin and myLittleBackup PresentationmyLittleAdmin and myLittleBackup Presentation
myLittleAdmin and myLittleBackup Presentation
Elian Chrebor
 

Tendances (20)

Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
Jss 2015 - Microsoft Stream analytics
Jss 2015 -  Microsoft Stream analyticsJss 2015 -  Microsoft Stream analytics
Jss 2015 - Microsoft Stream analytics
 
DataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudDataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le Cloud
 
Meetup Google Cloud
Meetup Google CloudMeetup Google Cloud
Meetup Google Cloud
 
J1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric CharlierJ1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric Charlier
 
Les nouveautés de MongoDB 3.6
Les nouveautés de MongoDB 3.6Les nouveautés de MongoDB 3.6
Les nouveautés de MongoDB 3.6
 
Zenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_mlZenika matinale spark-zeppelin_ml
Zenika matinale spark-zeppelin_ml
 
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
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
 
Delta Lake, un vernis pour parquet
Delta Lake, un vernis pour parquetDelta Lake, un vernis pour parquet
Delta Lake, un vernis pour parquet
 
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
 
Meetup Google Cloud Bigquery
Meetup Google Cloud Bigquery Meetup Google Cloud Bigquery
Meetup Google Cloud Bigquery
 
[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosql[JSS2015] - Document db et nosql
[JSS2015] - Document db et nosql
 
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
 
Meetup Google Cloud
Meetup Google CloudMeetup Google Cloud
Meetup Google Cloud
 
GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)
 
Architecture d’une app qui fait 5 millions de visites par mois
Architecture d’une app qui fait 5 millions de visites par moisArchitecture d’une app qui fait 5 millions de visites par mois
Architecture d’une app qui fait 5 millions de visites par mois
 
HTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien LanduréHTTP2 : ce qui va changer par Julien Landuré
HTTP2 : ce qui va changer par Julien Landuré
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
 
myLittleAdmin and myLittleBackup Presentation
myLittleAdmin and myLittleBackup PresentationmyLittleAdmin and myLittleBackup Presentation
myLittleAdmin and myLittleBackup Presentation
 

En vedette

Membase Intro from Membase Meetup San Francisco
Membase Intro from Membase Meetup San FranciscoMembase Intro from Membase Meetup San Francisco
Membase Intro from Membase Meetup San Francisco
Membase
 
Membase Introduction
Membase IntroductionMembase Introduction
Membase Introduction
Membase
 
Couchbase@live person meetup july 22nd
Couchbase@live person meetup   july 22ndCouchbase@live person meetup   july 22nd
Couchbase@live person meetup july 22nd
Ido Shilon
 
Node.js and couchbase Full Stack JSON - Munich NoSQL
Node.js and couchbase   Full Stack JSON - Munich NoSQLNode.js and couchbase   Full Stack JSON - Munich NoSQL
Node.js and couchbase Full Stack JSON - Munich NoSQL
Philipp Fehre
 
TechTalk #14 Grokking: Couchbase - NoSQL + Memcached + Real-time + Offline!
TechTalk #14 Grokking:  Couchbase - NoSQL + Memcached + Real-time + Offline!TechTalk #14 Grokking:  Couchbase - NoSQL + Memcached + Real-time + Offline!
TechTalk #14 Grokking: Couchbase - NoSQL + Memcached + Real-time + Offline!
Grokking VN
 
nitro
nitronitro
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Jean-Michel Franco
 
TechTalk #15 Grokking: The data processing journey at AhaMove
TechTalk #15 Grokking:  The data processing journey at AhaMoveTechTalk #15 Grokking:  The data processing journey at AhaMove
TechTalk #15 Grokking: The data processing journey at AhaMove
Grokking VN
 
N1QL workshop: Indexing & Query turning.
N1QL workshop: Indexing & Query turning.N1QL workshop: Indexing & Query turning.
N1QL workshop: Indexing & Query turning.
Keshav Murthy
 
Apache Kafka at LinkedIn
Apache Kafka at LinkedInApache Kafka at LinkedIn
Apache Kafka at LinkedIn
Discover Pinterest
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
Alexis Seigneurin
 
I Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache KafkaI Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache Kafka
Jay Kreps
 
Introduction to Apache Kafka- Part 1
Introduction to Apache Kafka- Part 1Introduction to Apache Kafka- Part 1
Introduction to Apache Kafka- Part 1
Knoldus Inc.
 
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Michael Noll
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
Lilia Sfaxi
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
Allen (Xiaozhong) Wang
 
Introduction to Apache ZooKeeper
Introduction to Apache ZooKeeperIntroduction to Apache ZooKeeper
Introduction to Apache ZooKeeper
Saurav Haloi
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - Verisign
Michael Noll
 

En vedette (19)

Membase Intro from Membase Meetup San Francisco
Membase Intro from Membase Meetup San FranciscoMembase Intro from Membase Meetup San Francisco
Membase Intro from Membase Meetup San Francisco
 
Membase Introduction
Membase IntroductionMembase Introduction
Membase Introduction
 
Couchbase@live person meetup july 22nd
Couchbase@live person meetup   july 22ndCouchbase@live person meetup   july 22nd
Couchbase@live person meetup july 22nd
 
Node.js and couchbase Full Stack JSON - Munich NoSQL
Node.js and couchbase   Full Stack JSON - Munich NoSQLNode.js and couchbase   Full Stack JSON - Munich NoSQL
Node.js and couchbase Full Stack JSON - Munich NoSQL
 
TechTalk #14 Grokking: Couchbase - NoSQL + Memcached + Real-time + Offline!
TechTalk #14 Grokking:  Couchbase - NoSQL + Memcached + Real-time + Offline!TechTalk #14 Grokking:  Couchbase - NoSQL + Memcached + Real-time + Offline!
TechTalk #14 Grokking: Couchbase - NoSQL + Memcached + Real-time + Offline!
 
nitro
nitronitro
nitro
 
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
 
Ben Broeckx
Ben BroeckxBen Broeckx
Ben Broeckx
 
TechTalk #15 Grokking: The data processing journey at AhaMove
TechTalk #15 Grokking:  The data processing journey at AhaMoveTechTalk #15 Grokking:  The data processing journey at AhaMove
TechTalk #15 Grokking: The data processing journey at AhaMove
 
N1QL workshop: Indexing & Query turning.
N1QL workshop: Indexing & Query turning.N1QL workshop: Indexing & Query turning.
N1QL workshop: Indexing & Query turning.
 
Apache Kafka at LinkedIn
Apache Kafka at LinkedInApache Kafka at LinkedIn
Apache Kafka at LinkedIn
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
 
I Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache KafkaI Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache Kafka
 
Introduction to Apache Kafka- Part 1
Introduction to Apache Kafka- Part 1Introduction to Apache Kafka- Part 1
Introduction to Apache Kafka- Part 1
 
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
 
Introduction to Apache ZooKeeper
Introduction to Apache ZooKeeperIntroduction to Apache ZooKeeper
Introduction to Apache ZooKeeper
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - Verisign
 

Similaire à Hi-Media Couchbase meetup Paris Nb #1

Pgbackrest meetup
Pgbackrest meetupPgbackrest meetup
Pgbackrest meetup
Jean-Christophe Arnu
 
Meetup CMS Rubedo 12 décembre 2013
Meetup CMS Rubedo 12 décembre 2013Meetup CMS Rubedo 12 décembre 2013
Meetup CMS Rubedo 12 décembre 2013
Rubedo, a WebTales solution
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec Azure
Nicolas Georgeault
 
SAS Forum Soft Computing Théâtre
SAS Forum Soft Computing ThéâtreSAS Forum Soft Computing Théâtre
SAS Forum Soft Computing Théâtre
Soft Computing
 
Retour d'expérience BIG COMPUTE & HPC sur Windows Azure, par ANEO et SUPELEC
Retour d'expérience BIG COMPUTE & HPC sur Windows Azure, par ANEO et SUPELECRetour d'expérience BIG COMPUTE & HPC sur Windows Azure, par ANEO et SUPELEC
Retour d'expérience BIG COMPUTE & HPC sur Windows Azure, par ANEO et SUPELEC
Microsoft Technet France
 
20151118 Retour d'Expérience : déploiement Cloud OpenStack chez un opérateur
20151118 Retour d'Expérience : déploiement Cloud OpenStack chez un opérateur20151118 Retour d'Expérience : déploiement Cloud OpenStack chez un opérateur
20151118 Retour d'Expérience : déploiement Cloud OpenStack chez un opérateur
Objectif Libre
 
Event driven architecture : comment Deezer passe en mode réactif
Event driven architecture : comment Deezer passe en mode réactifEvent driven architecture : comment Deezer passe en mode réactif
Event driven architecture : comment Deezer passe en mode réactif
Vincent Lepot
 
Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?
Christophe Villeneuve
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
Christophe Villeneuve
 
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
ANEO
 
Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019
Jean-Baptiste Claramonte
 
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
[GAB2016] Azure DocumentDB - Jean-Luc Boucho[GAB2016] Azure DocumentDB - Jean-Luc Boucho
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
Cellenza
 
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
AZUG FR
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01MongoDB
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
Microsoft
 
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
FactoVia
 
Sql Saturday Paris 2016 - De StreamInsight à Azure Stream Analytics
Sql Saturday Paris 2016 - De StreamInsight à Azure Stream Analytics Sql Saturday Paris 2016 - De StreamInsight à Azure Stream Analytics
Sql Saturday Paris 2016 - De StreamInsight à Azure Stream Analytics
Marius Zaharia
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
Laurent Guérin
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - Genève
aOS Community
 
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure PackLe cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Microsoft Décideurs IT
 

Similaire à Hi-Media Couchbase meetup Paris Nb #1 (20)

Pgbackrest meetup
Pgbackrest meetupPgbackrest meetup
Pgbackrest meetup
 
Meetup CMS Rubedo 12 décembre 2013
Meetup CMS Rubedo 12 décembre 2013Meetup CMS Rubedo 12 décembre 2013
Meetup CMS Rubedo 12 décembre 2013
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec Azure
 
SAS Forum Soft Computing Théâtre
SAS Forum Soft Computing ThéâtreSAS Forum Soft Computing Théâtre
SAS Forum Soft Computing Théâtre
 
Retour d'expérience BIG COMPUTE & HPC sur Windows Azure, par ANEO et SUPELEC
Retour d'expérience BIG COMPUTE & HPC sur Windows Azure, par ANEO et SUPELECRetour d'expérience BIG COMPUTE & HPC sur Windows Azure, par ANEO et SUPELEC
Retour d'expérience BIG COMPUTE & HPC sur Windows Azure, par ANEO et SUPELEC
 
20151118 Retour d'Expérience : déploiement Cloud OpenStack chez un opérateur
20151118 Retour d'Expérience : déploiement Cloud OpenStack chez un opérateur20151118 Retour d'Expérience : déploiement Cloud OpenStack chez un opérateur
20151118 Retour d'Expérience : déploiement Cloud OpenStack chez un opérateur
 
Event driven architecture : comment Deezer passe en mode réactif
Event driven architecture : comment Deezer passe en mode réactifEvent driven architecture : comment Deezer passe en mode réactif
Event driven architecture : comment Deezer passe en mode réactif
 
Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?Open source et microsoft azure reve ou realite ?
Open source et microsoft azure reve ou realite ?
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
Tech daysRetour d’expérience Big Compute & HPC sur Windows Azure [TechDays 2014]
 
Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019
 
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
[GAB2016] Azure DocumentDB - Jean-Luc Boucho[GAB2016] Azure DocumentDB - Jean-Luc Boucho
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
 
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
 
Sql Saturday Paris 2016 - De StreamInsight à Azure Stream Analytics
Sql Saturday Paris 2016 - De StreamInsight à Azure Stream Analytics Sql Saturday Paris 2016 - De StreamInsight à Azure Stream Analytics
Sql Saturday Paris 2016 - De StreamInsight à Azure Stream Analytics
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - Genève
 
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure PackLe cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
 

Hi-Media Couchbase meetup Paris Nb #1

  • 1. Utilisation de Couchbase pour le ciblage publicitaire Cédric Pessan Mickaël Le Baillif Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 2. Ce que nous allons voir ensemble... ● ● ● Hi-Media : aperçu de la société et de ses activités Ciblage publicitaire : à quoi ça sert, comment ça marche ? Notre utilisation de Couchbase – Place au sein de notre architecture – Connexions avec nos modules métiers – Interaction avec PostgreSQL Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 4. Hi-Media en chiffres 500 personnes dont 100 ingénieurs IT ● Bureaux IT à Paris et à Nantes ● Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 5. Les métiers d'Hi-Media Publicité Création et hébergement de sites Couchbase Meetup {"Number" :1} 21 novembre 2013 Paiement et micro-paiement
  • 6. Le retargeting produit Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 7. Objectif du retargeting produit ● ● Visite d'un site marchand : « tracking » de l'activité d'un internaute Visite d'un site tiers : mise en valeur des articles recherchés et recommandés dans des bannières publicitaires Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 8. Phase de tracking 1/2 http://himedia/tracking Annonceur : nn Site : mm Action : fiche produit Ref produit : rr-vv-pp Cookie : uid=AE23DF34 Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 9. Phase de tracking 2/2 Serveur web http://himedia/tracking NginX Module métier « tracking » Moteur de recommandation Validation format URL + Envoi msg queue Couchbase Meetup {"Number" :1} 21 novembre 2013 Annonceur : nn Site : mm Action : fiche produit Ref produit : rr-vv-pp Cookie : uid=AE23DF34 NginX HTTP 200 OK
  • 10. Asynchrone : stockage du tracking uid=AE23DF34 Action 1 Action 2 uid=AE23DF34 Annonceur : nn Site : mm Action : fiche produit Ref produit : rr-vv-pp Msg queue Moteur de recommandation Mise à jour de l'historique + Invalidation cache uid=AE23DF34 Action 1 Action 2 Action 3 Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 11. Phase d'affichage de publicité Serveur web Cache ? Module métier « display » Couchbase Mise en cache e l liv cu Cal Moteur de recommandation Couchbase Meetup {"Number" :1} 21 novembre 2013 NginX NginX uid=AE23DF34 HTTP 200 OK envoi bannière pub
  • 12. Notre utilisation de Couchbase Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 13. Quelques chiffres ● 7 buckets, pour séparation logique des données et besoins distincts de réplication ● 80 Go de données en RAM sans les réplicas ● 100 millions de clés ● Réplication XDCR unidirectionnelle vers cluster en hot standby Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 14. NoSQL : pourquoi Couchbase ? ● Redimensionnement horizontal très aisé, idéal pour suivre l'évolution de nos volumétries ● ● ● Expériences précédentes avec memcached On a débuté avec membase, pas besoin de NoSQL orientés documents Besoin de temps de réponse très courts pour des données précalculées ou mises en cache ● Sécurisation des données par réplication ● Tolérance aux pannes pour haute disponibilité Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 15. Protocole ● ● Besoin d'un protocole adapté à notre boucle événementielle C++ boost::asio Utilisation du protocole ASCII de memcached – get, gets, set, cas, incr, decr – Formattage des messages et parsing des réponses très simple à implémenter – Envoi/réception des messages sans passer par une bibliothèque externe, utilise directement boost::asio Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 16. Protocole ● En python, également protocole ASCII couplé à eventlet pour l'événementiel – À essayer : version 1.1.0 de la lib couchbase-python-client qui expérimente la délégation des I/O de libcouchbase (en C) par Python/gevent ou Python/Twisted – Overhead pour établir une connexion REST (management channel) + 100 connexions data sur des sessions de courtes durées (<10s) vs 100 connexions TCP sans contexte d'init à parser Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 17. Gestion des connexions ● Modèle événementiel : nombreuses requêtes métiers traitées simultanément – ● ● Plusieurs requêtes couchbase simultanées Une requête couchbase = une connexion TCP Utilisation d'un pool de connexion vers chaque bucket : environ 100 connexions par processus Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 18. Gestion des connexions ● Protocole ASCII simple : aucune notion de nœuds, typologie, vbucket, etc. ● Connexion des modules métiers vers des moxis ● Un bucket = un moxi ● ● Chaque machine a ses moxis en local, centaines de connexions entrantes (upstream) Moxi établit les connexions vers les nœuds Couchbase (downstream) en s'adaptant à la typologie, dispatche les requêtes vers les nœuds responsables des données Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 19. Gestion des connexions ● Utilisation du gold-standard recommandé par Couchbase(1) : – Chaque moxi se connecte vers un haproxy local – Conf haproxy liste tous les nœuds : ● ● – cluster couchbase principal cluster couchbase de backup si aucun nœud du cluster principal n'est joignable Les connexions des moxis sont réparties équitablement vers l'ensemble des nœuds opérationnels (1) http://docs.couchbase.com/moxi-manual-1.8/#moxi-standalone Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 20. Gestion des connexions Serveur A moxis upstream bucket A bucket B bucket C downstream x100 Module métier x100 x100 REST haproxy Couchbase Meetup {"Number" :1} 21 novembre 2013 Cluster Couchbase 2 nœuds 3 buckets
  • 21. Interactions entre modules HTTP NginX Module métier C++ libmemcacheasio (3) + boost::asio ) (1 Q PZ Module métier C++ M /0 ) (2 Q Module métier C++ CSV/XML Catalogues annonceur memcache_client(4) + eventlet Modules métier Python (1) https://github.com/mkoppanen/pzq (2) http://www.zeromq.org (3) https://code.google.com/p/memcacheasio/ (4) https://github.com/mixpanel/memcache_client Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 22. Interactions entre modules HTTP NginX Module métier C++ Q PZ Module métier C++ moxi haproxy M /0 Q Module métier C++ CSV/XML Catalogues annonceur Modules métier Python Couchbase Meetup {"Number" :1} 21 novembre 2013 moxi haproxy
  • 23. Interactions entre modules HTTP NginX Module métier C++ Q PZ Module métier C++ M /0 Q Module métier C++ Ligne de commande CSV/XML Catalogues annonceur Modules métier Python Interface IHM PHP Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 24. PostgreSQL vs Couchbase ● Requêtes PG pour calcul des liens entre produits d'un catalogue – ● ● ● Catégories, prix, etc. Requêtes trop lentes pour être utilisées « en live » lors d'un affichage de publicité Pré-calcul des données et stockage dans Couchbase Mis à jour lors d'un import de catalogue Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 25. Remplissage de Couchbase ● ● ● ● Dépend des buckets Historique internautes : par consommation sur queue de messages Statistiques : incréments lors du traitement des requêtes HTTP Cache d'affichage : à la volée lors du traitement d'une requête HTTP – – ● RAZ par TTL RAZ si historique change ou catalogue mis à jour Catalogues : chaînes d'import Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 26. Exemple : PostgreSQL vers Couchbase Script Python Worker CB Distribution sur queue PostgreSQL Worker CB Worker CB Cluster Couchbase Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 27. Exemple : PostgreSQL vers Couchbase Retrouvez ce code source commenté sur : https://gist.github.com/demikl/7559175 Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 28. Questions à creuser... ● Crash des moxis observé sous forte charge (20.000 set/s) si on augmente le nombre de downstreams (16 par nœud et par thread vs. 4 par défaut) ● Vues couchbase : – – ● délai de mise à jour des index Flag disponible pour savoir si l'index est à jour ? Répli XDCR bidirectionnelle : – mutations en boucle : MAJ clé sur cluster A, répliqué sur cluster B, répliqué sur cluster A, ... – Certaines clés/valeurs sont refusées : « invalid_json, […] lexical error: invalid bytes in UTF8 string » Couchbase Meetup {"Number" :1} 21 novembre 2013
  • 29. Contacts support.adtools.fr@hi-media.com Cédric Pessan Mickaël Le Baillif @demikl Retrouvez cette présentation sur : http://bit.ly/1awgBBk Couchbase Meetup {"Number" :1} 21 novembre 2013