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

Like this? Share it with your network

Share

Hi-Media Couchbase meetup Paris Nb #1

le

  • 375 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
375
Vues sur SlideShare
375
Vues externes
0

Actions

J'aime
0
Téléchargements
2
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.
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
    Processing...
Poster un commentaire
Modifier votre commentaire

Hi-Media Couchbase meetup Paris Nb #1 Presentation Transcript

  • 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
  • 3. Présentation institutionnelle d'Hi-Media 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