• J'aime
Hi-Media Couchbase meetup Paris Nb #1
Prochain SlideShare
Chargement dans... 5
×

Hi-Media Couchbase meetup Paris Nb #1

  • 228 vues
Transféré le

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.

Plus dans : Technologies
  • Full Name Full Name Comment goes here.
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
    Soyez le premier à commenter
    Be the first to like this
Aucun téléchargement

Vues

Total des vues
228
Sur Slideshare
0
À partir des ajouts
0
Nombre d'ajouts
0

Actions

Partages
Téléchargements
2
Commentaires
0
J'aime
0

Ajouts 0

No embeds

Signaler un contenu

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
    No notes for slide

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