Le téléchargement de votre SlideShare est en cours. ×
0
Utilisation de Couchbase
pour le ciblage publicitaire

Cédric Pessan
Mickaël Le Baillif

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

●

●

Hi-Media : aperçu de la société et de ses
activités
Ciblage publicitaire : à ...
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" :...
Les métiers d'Hi-Media
Publicité

Création et
hébergement de
sites

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

Paiem...
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 s...
Phase de tracking 1/2
http://himedia/tracking
Annonceur : nn
Site : mm
Action : fiche produit
Ref produit : rr-vv-pp

Cook...
Phase de tracking 2/2
Serveur web

http://himedia/tracking

NginX
Module
métier
« tracking »

Moteur de
recommandation

Va...
Asynchrone : stockage du tracking
uid=AE23DF34
Action 1
Action 2

uid=AE23DF34
Annonceur : nn
Site : mm
Action : fiche pro...
Phase d'affichage de publicité
Serveur web
Cache ?

Module
métier
« display »

Couchbase
Mise en
cache

e
l liv
cu
Cal

Mo...
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é...
NoSQL : pourquoi Couchbase ?
●

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

...
Protocole
●

●

Besoin d'un protocole adapté à notre boucle
événementielle C++ boost::asio
Utilisation du protocole ASCII ...
Protocole
●

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

À essayer : version 1.1.0 de la...
Gestion des connexions
●

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

●
●

Plusieurs requê...
Gestion des connexions
●

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

●

Connexion des modu...
Gestion des connexions
●

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

Chaque moxi se connecte vers un ha...
Gestion des connexions
Serveur A

moxis
upstream

bucket A
bucket B
bucket C

downstream

x100

Module
métier

x100
x100

...
Interactions entre modules
HTTP
NginX

Module
métier C++

libmemcacheasio (3) + boost::asio

)
(1

Q
PZ

Module
métier C++...
Interactions entre modules
HTTP
NginX

Module
métier C++
Q
PZ

Module
métier C++

moxi

haproxy

M
/0
Q

Module
métier C++...
Interactions entre modules
HTTP
NginX

Module
métier C++
Q
PZ

Module
métier C++
M
/0
Q

Module
métier C++
Ligne de comman...
PostgreSQL vs Couchbase
●

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

●

●

●

Catégories, prix, e...
Remplissage de Couchbase
●

●

●

●

Dépend des buckets
Historique internautes : par consommation sur queue de
messages
St...
Exemple : PostgreSQL vers Couchbase
Script Python
Worker
CB
Distribution
sur queue
PostgreSQL

Worker
CB
Worker
CB

Cluste...
Exemple : PostgreSQL vers Couchbase

Retrouvez ce code source commenté sur :
https://gist.github.com/demikl/7559175
Couchb...
Questions à creuser...
●

Crash des moxis observé sous forte charge
(20.000 set/s) si on augmente le nombre de downstreams...
Contacts
support.adtools.fr@hi-media.com

Cédric Pessan
Mickaël Le Baillif

@demikl

Retrouvez cette présentation sur :
ht...
Prochain SlideShare
Chargement dans... 5
×

Hi-Media Couchbase meetup Paris Nb #1

321

Published on

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.

Published in: Technologies
0 commentaires
0 mentions J'aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Be the first to like this

Aucun téléchargement
Vues
Total des vues
321
Sur Slideshare
0
À partir des ajouts
0
Nombre d'ajouts
0
Actions
Partages
0
Téléchargements
5
Commentaires
0
J'aime
0
Ajouts 0
No embeds

No notes for slide

Transcript of "Hi-Media Couchbase meetup Paris Nb #1"

  1. 1. Utilisation de Couchbase pour le ciblage publicitaire Cédric Pessan Mickaël Le Baillif Couchbase Meetup {"Number" :1} 21 novembre 2013
  2. 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
  3. 3. Présentation institutionnelle d'Hi-Media Couchbase Meetup {"Number" :1} 21 novembre 2013
  4. 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. 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. 6. Le retargeting produit Couchbase Meetup {"Number" :1} 21 novembre 2013
  7. 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. 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. 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. 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. 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. 12. Notre utilisation de Couchbase Couchbase Meetup {"Number" :1} 21 novembre 2013
  13. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×