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

38
Suivi d’activité avec Neo4j

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

Suivi d’activité avec Neo4j

• 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

La mission de mon équipe

• 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

• 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

• 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

• 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

Les besoins

• 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

• 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

Sentinel – Architecture

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

• 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

• 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

• UI consistée de tableaux de bords HTML et graphiques dynamiques

• API REST

• Spring Boot, Thymeleaf, D3.js, Swagger

Les Services

Workday Confidential

Neo4j in a Nutshell

• 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

• 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

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

Extraction de la donnée

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

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

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

Etape 3: Modules

Workday Confidential

• La module version est associée à un “Module”

Group com.workday

Module core

ID: “com.workday:core”

Module

core

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

Etape 4: Résolution des dépendences

Workday Confidential

• Descripteurs Maven / Ivy Dépendences

• Dépendences Relations DEPENDS_ON

services

2.0.0DEPENDS_ON

gson

2.2.2

core

1.0.5DEPENDS_ON

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

Manifest Metadata – SCM Info

Workday Confidential

• WD-Git-Origin ssh://[email protected]/core/core.git

• WD-Git-Commit e28a60b96f452680c57cb76798def09fd171011f

Artifact

core

1.0.5 jar

Git Commit

core

e28a60…

HAS_COMMIT

Exemples concrets

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 ?

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

Orchestration de builds

Workday Confidential

Producing build Consuming build

Bamboo Build

CORE

BUILT

Artifact

core 1.0.5

jar

ModuleVersion

core 1.0.5

AR

TIF

AC

T_

OF

ModuleVersion

foo-services 1.3.0

AR

TIF

AC

T_

OF

Bamboo Build

FOO-SERVICES

Artifact

foo-services 1.3.0

jar

BUILT

DE

PE

ND

S_

ON

DEPENDS_ON

Release notes automatisées

Workday Confidential

Version 1 Version 2

Bamboo Build

CORE #11

BUILT

Artifact

core v1

jar

Git Commit

core

5ce1f767

HA

S_

RE

VIS

ION

Git Commit

core

ee2a0e22

HA

S_

RE

VIS

ION

Bamboo Build

CORE #12

Artifact

core v2

Jar

BUILT

PA

RE

NT

_R

EV

ISIO

N

JIRA Issue

CORE-120

LINKS_TO

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

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

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

Q & A

Thanks for attending

Workday Confidential

TM