$30 off During Our Annual Pro Sale. View details »

An Event-oriented News feed

Viadeo
November 05, 2014

An Event-oriented News feed

From a synchronised, single piece architecture to an event-driven one by @frobini @Kuhess and @Myxz

Viadeo

November 05, 2014
Tweet

More Decks by Viadeo

Other Decks in Programming

Transcript

  1. An Event-oriented News feed by Grégory Truchetet, Quentin Suire &

    Fabrice Robini
  2. Member Factory

  3. None
  4. None
  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. “ Les activités de mon réseau ”

  12. MySql Temps de réponse pourris Modifier... et prier ! Pas

    de standards LEGACY 2004 - 2014
  13. “OK Dude, wait for two weeks !”

  14. Prenons un exemple concret l’ajout d’une expérience professionnelle

  15. Notification News feed ... ? W E B A P

    P Couplage fort Transactions ? Synchrone PDG de L’Oréal DB
  16. Nous allons vous raconter l’histoire de la renaissance du News

    feed
  17. La vision “ A scalable event-driven architecture to empower our

    innovative capabilities by following concerns separation & asynchronous processing patterns ”
  18. Webapp Bus C1 C2 C3 News feed ES DB L’architecture

    événementielle Plateforme
  19. Zoom sur...

  20. La reprise de données Webapp Bus C1 C2 C3 News

    feed ES DB Plateforme Archéologie 2.0 Migration au fil de l’eau
  21. Peu (pas?) d’historique La reprise de données

  22. Webapp Bus C1 C2 C3 News feed ES DB Avoir

    un langage commun Plateforme
  23. PositionAddedEvent { “memberId”: “urn:viadeo:member:name:jennyfer”, “positionId”: “urn:viadeo:skill:name:pdgDeLOreal”, ... } Input {

    "actor": { "id": "urn:viadeo:member:name:jennyfer", "objectType": "member", "displayName": "Jennyfer" "extensions": { ... } }, "verb": "add", "object": { "id": "urn:viadeo:skill:name:pdgDeLOreal", "objectType": "position", "displayName": "PDG de L’Oréal" "extensions": { ... } }, "target": { "id": "urn:viadeo:profile:name:jennyfer", "objectType": "profile", "displayName": "Jennyfer's profile" "extensions": { ... } } } Output Avoir un langage commun Ex: “Add position news” consumer Activity Stream
  24. R.Ex

  25. Le processus itératif #FailFast L’itératif en fail fast Sprints courts

    Tests de performances Tests fonctionnels
  26. En production depuis juin 3 mois 12 itérations 50 déploiements

    3 noeuds Elasticsearch 40 Millions de documents 5 personnes migration d’une news en 2 jours
  27. #1 - Attention au sur-design

  28. #2 - Soyez exhib

  29. Montrez vos métriques

  30. Montrez vos métriques Oooooooopsssss !

  31. Montrez vos métriques

  32. #4 - Écrivez à 4 mains, exposez vos mocks

  33. #5 - DevOpsArch DreamTeam

  34. Prochainement...

  35. This, Jen, is the News feed. Questions ?

  36. ANNEXES

  37. Les chiffres de Viadeo Viadeo.com (24M dont 9M Fr) Nb

    de Newsfeed vus / jour : 500k PENSE-BÊTE
  38. Le processus de migration Monitoring et devops • déploiements déclenchés

    par les développeurs • outils de monitoring
  39. Les problèmes rencontrés • Problèmes techniques ◦ archéologie pour émettre

    les événements ◦ sérialisation des événements dans le bus ◦ documents mutables dans Elasticsearch • Problèmes humains ◦ utilisation d’un nouveau paradigme ◦ synchronisation des équipes pour les décommisions
  40. Le processus de migration Les besoins définis par le produit

    ! • sprint court (1 semaine) • développements conduits par les tests • spécifications des données des news très tôt
  41. The Take Away ↦ Be Mocked Driven Development ↦ Avoid

    overdesign -> Be iteratif -> Go, mesure, refactor ↦ ArchDevOps -> Push button ↦ Make things visible -> Show your metrics
  42. Draft : Brins de trucs à penser S’inscrit dans un

    chantier de migration IT Porté par un projet Funk : le nouveau Dashboard Enjeu : poser les bases d’une premières archi La Vision du Newsfeed Eat Your Own Dog Food : -au service de- → D’abord pour les autres (le mobile) La perf : être en dessous des 100ms Stratégie de tests de perf : Graceful Degradation Choix fonctionnel : limité le newsfeed à 1000 producers Séparations des responsabilités : Network, News (--> Activities & Reco) Le suivi du monitoring L’augmentation du temps de réponse puis le refactoring Le DevOps, la responsabilités des devs L’architecture infra Le Newsfeed en chiffre Stratégie d’initialisation du réseau : Lazy & Eager (sur quelle base ?) Limitations: synchrone, imaintenable
  43. L’histoire -> Méthodo : itératif, démo toutes les semaines, Mocked

    drived developement -> Design : expliquer pourquoi “Orienté Document” , Zoom sur Activity Stream (faire emerger un modèle standard & auto-portant) -> Parallele Run (pas de migration, pas de reprise des données, mais consomation depuis la legacy) -> Tests de perf (valider le Graceful Degradation, valider la Stack) -> Intialisation (lazy & eager) -> L’infra -> Le suivi (les outils de monitoring, les indicateurs, le deploy continu) -> Les devs super responsabilisés et on a la main sur le déploiement -> Nb de déploiements
  44. 500 ms #TrueStory #FAIL I am the *Manager, *Service, *Controller,

    JSON *Converter ...
  45. Plan • Le contexte du dashboard Viadeo • Les limites

    de l’ancien système • L’architecture événementielle • Zoom sur la migration de données • Zoom sur le modèle Activity Stream • Le processus itératif #FailFast • Le News feed en chiffres • Doggy bag
  46. Temps de réponse pourris Modifier .... et prier ! Pas

    de standards MySql LEGACY 2004 - 2014 R.I.P