Hi-Media Couchbase meetup Paris Nb #1
Upcoming SlideShare
Loading in...5
×
 

Hi-Media Couchbase meetup Paris Nb #1

on

  • 343 vues

How Hi-Media is using Couchbase for retargeting advertising. ...

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.

Statistiques

Vues

Total des vues
343
Vues sur SlideShare
343
Vues externes
0

Actions

J'aime
0
Téléchargements
1
Commentaires
0

0 Ajouts 0

No embeds

Accessibilité

Catégories

Détails de l'import

Uploaded via as Adobe PDF

Droits d'utilisation

© Tous droits réservés

Report content

Signalé comme inapproprié Signaler comme inapproprié
Signaler comme inapproprié

Indiquez la raison pour laquelle vous avez signalé cette présentation comme n'étant pas appropriée.

Annuler
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Votre message apparaîtra ici
    Processing...
Poster un commentaire
Modifier votre commentaire

Hi-Media Couchbase meetup Paris Nb #1 Hi-Media Couchbase meetup Paris Nb #1 Presentation Transcript

  • 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