Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

GraphTour - Workday: Tracking activity with Neo4j (French version)

François Ritaly - Worday - French Version

  • Login to see the comments

  • Be the first to like this

GraphTour - Workday: Tracking activity with Neo4j (French version)

  1. 1. Suivi d’activité avec Neo4j
  2. 2. • François Ritaly • Build Engineer (Build Engineering Team) • Situé à Paris • Responsabilités ‒ Développement de plugins Gradle réutilisables ‒ Administration d’Artifactory ‒ Développement d’outils sur mesure ‒ Support aux équipes de développment (builds principalement) ‒ Sentinel (Le sujet de cette présentation) Qui suis-je ? Workday Confidential
  3. 3. La mission de mon équipe
  4. 4. • Définir les bonnes pratiques pour les équipes de développement (dependency locking, promotion d’artefacts, gestion des meta-données) • Fournir des outils génériques (Plugins Gradle & autres outils sur mesure) • Administrer les services communs (Artifactory) • Assister les équipes de développment Build Engineering – Notre mission Workday Confidential
  5. 5. • S’assurer que les règles sont bien suivies • Chez Workday, les ingénieurs ont beaucoup de liberté ! ‒ Netflix: The Paved Road • Les outils proposés sont-ils pertinents ? • Comprendre comment les équipes de développement travaillent  On a besoin de réponses a ces questions ! Why We Need Monitoring Workday Confidential
  6. 6. • Artefacts (Jars, Rpms, “Deliveries”, etc) • CI Builds (Bamboo, Team City &Jenkins) • SCM changes (BitBucket, GitHub, Gerritt, etc) • Dépendences (entre Artifacts, Builds, etc) • Tickets JIRA (suivi du code) • Promotions (d’artefacts) • Meta-données en général Ce qui nous intéresse… Workday Confidential
  7. 7. • Pas de source de vérité unique avec toute l’information nécessaire ! • La donnée est disséminée à travers plusieurs systèmes (AF, CI, JIRA…) • … est securisée avec des comptes différents (AD, LDAP) • … est stockée sous différents formats (JSON, XML, CSV, etc) • … n’est pas toujours facilement accessible • Accéder à une source est (habituellement) facile • Accéder à deux sources est déjà plus compliqué • Pas de language de requête pour requêter la donnée aggregée Problème: La donnée est partout !! Workday Confidential
  8. 8. Les besoins
  9. 9. • Accès simple à l’information • Modèle de données intuitif et unifié • Language de requête puissant • Donnée aussi fraîche que possible  Fréquentes mises à jour  Mises à jour rapides (performance) • Capacité de facilement faire évoluer le modèle de données • Capacité d’exposer l’information aux équipes de développement (automatisation) Les besoins Workday Confidential
  10. 10. • Ne pas compter sur l’utilisateur pour fournir l’information (ou alors en tout dernier recours) ! • L’information que nous recherchons habituellement existe déjà ou alors peut-être dérivée, utilisons-la ! Mais surtout ! Workday Confidential
  11. 11. Sentinel – Architecture
  12. 12. Architecture Workday Confidential REST API Web UI Data Miner … JIRA Artifactory Bamboo BitBucket Data SourcesUne fondation pour résoudre nos problèmes actuels et futurs Neo4j Aggregation Sanitization Normalization
  13. 13. • Outil en ligne de commande (écrit en Groovy) • Fat jar exécutable • S’exécute toutes les 15 mins depuis Bamboo • Scanne les data sources contenant l’information utile • Extrait, nettoie et normalise de manière préemptive l’information • Détecte les mises à jour de manière incrémentale (performance) • Crash-proof • Enchaînement de 59 commandes en séquence • Un scan dure entre 8 mins et 23 mins L’extracteur de données Workday Confidential
  14. 14. • Base de données NoSQL de type graph • Paradigme adapté à notre problème • Trés flexible et facile d’utilisation • Schema-less • Excellente performance • Donnée stockée à un seul endroit • Cypher (Language de requête) ! La base de données: Neo4j Workday Confidential
  15. 15. • UI consistée de tableaux de bords HTML et graphiques dynamiques • API REST • Spring Boot, Thymeleaf, D3.js, Swagger Les Services Workday Confidential
  16. 16. Neo4j in a Nutshell
  17. 17. • Les noeuds ont des propriétés (comparable à une Map<String, ?>) • … peuvent avoir 0-N labels (Typage, Polymorphisme) Neo4j - Noeuds Workday Confidential core 1.0.5 jar Artifact ArtifactoryFile Workday id com.workday:core group com.workday artifact core version 1.0.5 created 1458713182201
  18. 18. • Les relations représentent un lien entre 2 noeuds • … ont un nom • … peuvent être dirigées • … peuvent avoir des propriétés Neo4j - Relations Workday Confidential Artifact core 1.0.5 jar Git Commit core 5ce1f767 HAS_COMMIT
  19. 19. Language de requête de Neo4j Un noeud () Un noeud avec un label (:Person) Une relation entre 2 noeuds ()--() Une relation dirigée avec un label ()-[:PARENT_OF]->() MATCH (parent:Person)-[:PARENT_OF]->(child:Person) RETURN parent.name, COLLECT(child.name) Neo4j - Cypher Workday Confidential
  20. 20. Extraction de la donnée
  21. 21. Tout démarre avec Artifactory Workday Confidential • Dépôt officiel des artefacts, rpms, images Docker • L’API REST permet de détecter les nouveaux artefacts
  22. 22. Etape 1: Artefacts Workday Confidential • URI: com/workday/core/1.0.5/core-1.0.5-javadoc.jar  Group com.workday  Module core  Version 1.0.5  Type jar  Classifier javadoc  ID: “com.workday:core:1.0.5:javadoc@jar” Artifact core 1.0.5 jar javadoc
  23. 23. Etape 2: Module Versions Workday Confidential • L’artefact est associé à une “Module Version”  Group com.workday  Module core  Version 1.0.5  ID: “com.workday:core:1.0.5” ModuleVersion core 1.0.5
  24. 24. Etape 3: Modules Workday Confidential • La module version est associée à un “Module”  Group com.workday  Module core  ID: “com.workday:core” Module core
  25. 25. Les 3 concepts ensembles Workday Confidential Module coreArtifact jar Artifact javadoc jar Artifact sources jar ARTIFACT_OF Artifact jar Artifact javadoc jar Artifact sources jar ARTIFACT_OF Version 1.0.5 Version 1.0.7 VERSION_OF VERSION_OF Version 1.0.6
  26. 26. Etape 4: Résolution des dépendences Workday Confidential • Descripteurs Maven / Ivy  Dépendences • Dépendences  Relations DEPENDS_ON services 2.0.0 DEPENDS_ON gson 2.2.2 core 1.0.5 DEPENDS_ON
  27. 27. Etape 5: Extraction des méta-données Workday Confidential • Alimentées au moment du build (plugin Gradle propriétaire) • Capturent l’information suivante: ‒ Gradle, JDK, Machine de build ‒ Builds (Bamboo, Jenkins…) ‒ SCM changes (Git commit) • Auto-documente les artefacts
  28. 28. Manifest Metadata – SCM Info Workday Confidential • WD-Git-Origin ssh://git@bitbucket.acme.com/core/core.git • WD-Git-Commit e28a60b96f452680c57cb76798def09fd171011f Artifact core 1.0.5 jar Git Commit core e28a60… HAS_COMMIT
  29. 29. Exemples concrets
  30. 30. Liste de tous les artefacts Workday Workday Confidential Group Module Latest Version Age (days) SCM url SCM change Build URL Latest JIRAs com.workday core 1.0.5 120.2 core.git e28a60b9 URL CORE-120 com.workday foo-services 1.3.0 29.1 foo-services.git 146ae135 URL FOO-57 com.workday bar-services 2.2.8 54.8 bar-services.git b538c156 URL BAR-70 … … … … … … … … Page web accessible avec toutes les dernières versions (donnée toujours à jour) → Où se trouve le build associé à ce fichier jar ? → Où sont les sources de ce fichier jar ?
  31. 31. Identification des dépendences 1/x (directes) Workday Confidential MATCH (dependent:ModuleVersion)-[:DEPENDS_ON]->(dependency:ModuleVersion) WHERE dependency.id = "com.workday:core:1.0.5” RETURN dependent.id AS dependent  Service REST disponible Dependent com.workday:foo- services:1.3.0 com.workday:foo- services:1.2.5 com.workday:bar- services:2.2.8 com.workday:bar- services:2.2.7 …
  32. 32. Orchestration de builds Workday Confidential Producing build Consuming build Bamboo Build CORE BUILT Artifact core 1.0.5 jar ModuleVersion core 1.0.5 ARTIFACT_OF ModuleVersion foo-services 1.3.0 ARTIFACT_OF Bamboo Build FOO-SERVICES Artifact foo-services 1.3.0 jar BUILT DEPENDS_ON DEPENDS_ON
  33. 33. Release notes automatisées Workday Confidential Version 1 Version 2 Bamboo Build CORE #11 BUILT Artifact core v1 jar Git Commit core 5ce1f767 HAS_REVISION Git Commit core ee2a0e22 HAS_REVISION Bamboo Build CORE #12 Artifact core v2 Jar BUILT PARENT_REVISION JIRA Issue CORE-120 LINKS_TO
  34. 34. Identifier les changements associés à un JIRA Workday Confidential Trouver toutes les mentions d’un JIRA dans les commentaires de commit Input: JIRA issue Output: Set of SCM changes JIRA Issue CORE-120 Git Commit core 5ce1f767 Git Commit core 5954ff88 Git Commit core ee2a0e22
  35. 35. Règle: “Aucune dépendence dynamique permise” Raison: Les builds doivent être reproductibles Dynamic versions: 1.+, LATEST, [1.0, 2.0[ Détection des violations de règles Workday Confidential Page HTML listant toutes les infractions à la règle ModuleVersion baz 4.2.10 ModuleVersion pmd-checks 1.+ DEPENDS_ON
  36. 36. Conclusion Workday Confidential • Service mis en production • Neo4j est l’outil parfait pour capturer la donnée qui nous intéresse ‒ Très facile de refactorer / enrichir la donnée • Cypher nous permet de comprendre la donnée aggregée • Fondation solide pour de futurs services ‒ Partie difficile: Extraire la donnée ‒ Partie facile: Créer de nouvelles requêtes sur la donnée existante • Decisions basées sur des faits ! Plus de suppositions • Approche holistique
  37. 37. Q & A Thanks for attending Workday Confidential
  38. 38. TM

×