Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Retour d'expérience sur l'utilisation de RabbitMQ chez BlaBlaCar

Retour d'expérience sur l'utilisation de RabbitMQ chez BlaBlaCar

Passage en revue de différents use cases intégrant RabbitMQ; l'oubli de mot de passe, la publication asynchrone et les tâches crons.
Mise en évidence des problèmes rencontrés et solutions apportées.

Présentation faite au sfPot de Paris le 12 mars 2013.

Olivier Dolbeau

March 13, 2013
Tweet

More Decks by Olivier Dolbeau

Other Decks in Programming

Transcript

  1. Blablacar – Quelques chiffres Nos utilisateurs :! •  3 millions

    (bientôt !)! •  France, Espagne, Angleterre, Italie, Benelux, Pologne...! Archi :! •  PHP 5.3 - Mysql 5.5 (percona)! •  2 serveurs frontaux (+ 4 virtuals spares)! •  2 MySQL masters + 4 slaves! •  sf2, Redis, ElasticSearch, …!
  2. Sommaire •  Présentation d’AMQP! •  Présentation de RabbitMQ! •  Cas

    pratique: mot de passe oublié! •  Gains de l’asynchrone! •  Cas pratique: publication asynchrone! •  Problèmes rencontrés / Solutions! •  Tâches crons! •  Conclusion!
  3. AMQP - Définition « L’objectif d’AMQP est de standardiser les

    échanges entre serveurs de messages en se basant sur les principes suivants : orienté message, utilisation de files d’attente, routage (point à point et par diffusion/abonnement), fiabilité et sécurité. »"
  4. RabbitMQ - Définition « You can think about it as

    a post office: when you send mail to the post box you're pretty sure that Mr. Postman will eventually deliver the mail to your recipient. Using this metaphor RabbitMQ is a post box, a post office and a postman. »"
  5. MDP oublié – Contexte 2/2 LENT !! ! ! A

    cause de l’envoi d’email:! ! Rendu de la page lent! Client pas content!
  6. MDP oublié – Envoi à RabbitMQ C’est faux ! mot

    de passe Email envoyé ! Message json Générique Structuré Simple
  7. Gains de l’asynchrone Logique métier déplacée! ! Très avantageux:! !

    •  Temps de réponse amélioré! •  Charge serveur diminuée! •  Séparation des différentes logiques:! •  Les frontaux génèrent des pages! •  Les workers s’occupent du métier!
  8. Cas d’utilisation •  Envoi d’emails / SMS! •  Suppression de

    compte! •  Création d’alertes (recherches)! •  Enregistrement de l’historique des recherches! •  Log des actions utilisateurs! •  Publication de trajets!
  9. Publi asynchrone – le pourquoi du comment Enjeux:! •  Logique

    métier complexe! •  Temps de traitement conséquent! •  Nombreuses écritures en base! •  Envoi de mail! •  Mise à jour de Redis, ElasticSearch, etc.! Implémentation! •  Informations publiées dans RabbitMQ! •  Forcément, traitement asynchrone! •  Ajax pour checker si le trajet a bien été publié!
  10. RabbitMQ chez BlaBlaCar Exchange key1 queue key2 key3 … Type:

    direct Par exemple: Mot de passe oublié. Exchange: User Routing key: password_forgotten Routé dans la queue: User
  11. Difficultés – Gestion des workers Problèmes! •  PHP !! • 

    Fuites mémoires! •  Arrêt / Redémarrage (dans le cas de MEP notamment)! Solutions! •  Crash régulier des workers! •  Tous les x messages traités! •  Toutes les x minutes! •  Lancement du Garbage Collector manuel! •  Gestion des signaux avec pcntl!
  12. Difficultés – Perte de messages 1/3 La sécurité des messages

    est garantie… lorsqu’ils sont dans RabbitMQ.! •  Une exception dans un traitement ?! •  Un crash bête et méchant ?! => MESSAGE PERDU ?!!
  13. Cas d’utilisation •  Envoi d’emails / SMS! •  Suppression de

    compte! •  Création d’alertes (recherches)! •  Enregistrement de l’historique des recherches! •  Log des actions utilisateurs! •  Publication asynchrone! •  Tâches crons!
  14. Gains de l’asynchrone dans les crons Logique métier déplacée! !

    Très avantageux:! ! •  Vitesse des crons améliorée! •  Traitements unitaires VS traitements par lots! •  Séparation des différentes logiques:! •  Les crons sélectionnent les enregistrements! •  Les workers s’occupent du métier! •  Plus souple! •  Plus d’enregistrements à traiter = plus de workers!
  15. Conclusion RabbitMQ Rocks !! •  Rapide !! •  Séparation des

    responsabilités! •  Gestion des priorités! •  Traitement unitaire!
  16. Et plus encore… Autres avantages:! •  Possibilité de routing extrêmement

    avancé! •  Langage agnostique! •  HA! Autres problèmes:! •  Kernel sf2 modifié -> capl! •  Gestion des connections BDD, Redis, etc.! •  Monolog: conserve tous les logs par défaut!