hi-media couchbase meetup paris nb #1

29
Couchbase Meetup {"Number" :1} 21 novembre 2013 Utilisation de Couchbase Utilisation de Couchbase pour le ciblage publicitaire pour le ciblage publicitaire Cédric Pessan Mickaël Le Baillif

Upload: mickael-le-baillif

Post on 08-Jul-2015

306 views

Category:

Technology


1 download

DESCRIPTION

How Hi-Media is using Couchbase for retargeting advertising. Cédric Pessan and Mickaël Le Baillif demonstrate how Hi-Media is using Couchbase to deliver low-latency, highly-available retargeted advertisements.

TRANSCRIPT

Page 1: Hi-Media Couchbase meetup Paris Nb #1

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

Utilisation de CouchbaseUtilisation de Couchbasepour le ciblage publicitairepour le ciblage publicitaire

Cédric PessanMickaël Le Baillif

Page 2: Hi-Media Couchbase meetup Paris Nb #1

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

Page 3: Hi-Media Couchbase meetup Paris Nb #1

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

Présentation Présentation institutionnelle d'Hi-Mediainstitutionnelle d'Hi-Media

Page 4: Hi-Media Couchbase meetup Paris Nb #1

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

Hi-Media en chiffres● 500 personnes dont 100 ingénieurs IT● Bureaux IT à Paris et à Nantes

Page 5: Hi-Media Couchbase meetup Paris Nb #1

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

Les métiers d'Hi-Media

Publicité Paiement et micro-paiement

Création et hébergement de

sites

Page 6: Hi-Media Couchbase meetup Paris Nb #1

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

Le retargeting produitLe retargeting produit

Page 7: Hi-Media Couchbase meetup Paris Nb #1

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

Page 8: Hi-Media Couchbase meetup Paris Nb #1

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

Phase de tracking 1/2

http://himedia/trackingAnnonceur : nnSite : mmAction : fiche produitRef produit : rr-vv-pp

Cookie : uid=AE23DF34

Page 9: Hi-Media Couchbase meetup Paris Nb #1

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

NginX

Phase de tracking 2/2Serveur web

http://himedia/trackingAnnonceur : nnSite : mmAction : fiche produitRef produit : rr-vv-pp

Cookie : uid=AE23DF34

HTTP 200 OKMoteur de

recommandation NginX

Module métier

« tracking »

Validation format URL

+Envoi msg

queue

Page 10: Hi-Media Couchbase meetup Paris Nb #1

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

Asynchrone : stockage du tracking

uid=AE23DF34Annonceur : nnSite : mmAction : fiche produitRef produit : rr-vv-pp

Msg queue

uid=AE23DF34 Action 1 Action 2

uid=AE23DF34 Action 1 Action 2 Action 3

Moteur de recommandation

Mise à jour de l'historique+

Invalidation cache

Page 11: Hi-Media Couchbase meetup Paris Nb #1

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

uid=AE23DF34

HTTP 200 OKenvoi bannière pub

Cache ?

Calcul liveMise en

cache

Phase d'affichage de publicité

Couchbase

NginX

Serveur web

Module métier

« display »

NginXMoteur de

recommandation

Page 12: Hi-Media Couchbase meetup Paris Nb #1

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

Notre utilisation de Notre utilisation de CouchbaseCouchbase

Page 13: Hi-Media Couchbase meetup Paris Nb #1

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

Page 14: Hi-Media Couchbase meetup Paris Nb #1

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é

Page 15: Hi-Media Couchbase meetup Paris Nb #1

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

Page 16: Hi-Media Couchbase meetup Paris Nb #1

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

Page 17: Hi-Media Couchbase meetup Paris Nb #1

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

Page 18: Hi-Media Couchbase meetup Paris Nb #1

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

Page 19: Hi-Media Couchbase meetup Paris Nb #1

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

Page 20: Hi-Media Couchbase meetup Paris Nb #1

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

Gestion des connexionsServeur A

Cluster Couchbase2 nœuds

3 buckets

haproxy

upstream downstream

moxisbucket Abucket Bbucket C

x100

x100

x100

RE

ST

Module métier

Page 21: Hi-Media Couchbase meetup Paris Nb #1

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

Interactions entre modules

Module métier C++

Module métier C++

Module métier C++

PZQ (1) / 0M

Q (2)

Modules métier Python

libmemcacheasio (3) + boost::asio

HTTP

memcache_client(4) + eventlet

(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

CSV/XML

Catalogues annonceur

NginX

Page 22: Hi-Media Couchbase meetup Paris Nb #1

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

Interactions entre modules

Module métier C++

Module métier C++

Module métier C++

PZQ / 0M

Q

Modules métier Python

HTTP

CSV/XML

Catalogues annonceur

moxi

moxi

haproxy

haproxy

NginX

Page 23: Hi-Media Couchbase meetup Paris Nb #1

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

Interactions entre modules

Module métier C++

Module métier C++

Module métier C++

Modules métier Python

HTTP

CSV/XML

Catalogues annonceur

NginX

PZQ / 0M

Q

Interface IHM PHP

Ligne de commande

Page 24: Hi-Media Couchbase meetup Paris Nb #1

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

Page 25: Hi-Media Couchbase meetup Paris Nb #1

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

Page 26: Hi-Media Couchbase meetup Paris Nb #1

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

Exemple : PostgreSQL vers Couchbase

Cluster Couchbase

PostgreSQL

Script Python

Worker CB

Worker CB

Worker CB

Distribution sur queue

Page 27: Hi-Media Couchbase meetup Paris Nb #1

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

Exemple : PostgreSQL vers Couchbase

Retrouvez ce code source commenté sur :https://gist.github.com/demikl/7559175

Page 28: Hi-Media Couchbase meetup Paris Nb #1

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 »

Page 29: Hi-Media Couchbase meetup Paris Nb #1

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

Contacts

Cédric Pessan

Mickaël Le Baillif@demikl

[email protected]

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