REX Monorepo à grande échelle sur SNCF Connect.
Support de la présentation à BreizhCamp Rennes 2023 (30 juin, track Architecture).
Présenté par François Nollen et Julien Buret pour SNCF Connect & Tech.
Lien replay : https://www.youtube.com/watch?v=GkxHLcIFujw
7. 7
Que fait-on naturellement quand un système gagne en complexité,
comporte de nombreux applicatifs, et que les équipes se multiplient ?
On organise des dépôts Git, des usines logicielles, des
environnements de travail pour chaque composant ou équipe
Chacun chez soi, les dinosaures seront bien gardés ! 🦕🐊🦤🐢🦎
QUAND UN PROJET DEVIENT COMPLEXE…
8. 8
• Chaque application était sous la responsabilité d'une équipe
• Chaque équipe ses dépôts Git, ses outils, sa CI/CD
• Peu de contributions entre équipes
• Evolutions transverses : beaucoup d’efforts
de coordination/synchronisation
• Effet « truck factor »
AVANT SNCF CONNECT…
13. 14
PROMESSES DU MONOREPO
🥵 Ajout de bibliothèque partagée
😈 Tentation de dupliquer du code
😵💫 Outillages/pratiques hétérogènes
🥵 Impacts difficiles à cerner,
coûteux à vérifier
😵💫 Historique distribué
💣 Gestion des versions (et conflits)
💚 Ajout de bibliothèque partagée
💚 Pas de duplication de code
💚 Outillages/pratiques homogènes
💚 Impact faciles à vérifier
au sein du monorepo
💚 Historique unique
💚 Une version de chaque composant
15. 16
🤔 Monorepo
= monolithe ?
🤔 Monorepo
vs. micro-services ?
DES INQUIÉTUDES SUR L’ARCHITECTURE
Illustration
:
https://monorepo.tools/
16. 17
• Maintenabilité :
• On va modifier mon code
sans que je le sache ?!
• Elasticité (à grande échelle) :
• Performances ?
• Coûts ?
D’AUTRES INQUIÉTUDES
Illustration
:
https://media.paperblog.fr/i/770/7708974/jurassic-park-L-Adq2yp.gif
17. 18
PLUS SIMPLE PLUS ACCESSIBLE PLUS VERT PLUS PERSONNALISÉ
NOTRE NOUVEAU SERVICE NUMÉRIQUE POUR LES
PETITS ET GRANDS TRAJETS !
de billets vendus en 2022,
l’équivalent de 6,5 stades de
France remplis chaque jour !
1 Mds
de visites en 2022: c’est 3
millions par jour !
>190M
18. 19
PLUS SIMPLE PLUS ACCESSIBLE PLUS VERT PLUS PERSONNALISÉ
NOTRE NOUVEAU SERVICE NUMÉRIQUE POUR LES
PETITS ET GRANDS TRAJETS !
22 RÉSEAUX DE TRANSPORTS
couvrant 500+ COMMUNES
TITRES ÎLE-DE-FRANCE
vendus en 2022 (tickets seuls
ou carnets et pass Navigo)
700 000
20. 21
🚨 Une architecture complexe, des enjeux et une audience
qui justifient une démarche ambitieuse
🏅 Le succès de nos expériences passées (à plus petite échelle)
avec le Cloud, Gradle, Terraform, Monorepo…
🚀 Partir « from scratch » avec une stack à l'état de l’art
OUVERTURE, CONFIANCE, AUDACE ?
21. Entrée dans le
Monorepo !
Illustration
:
https://www.rejouisciences.uliege.be/cms/c_11420249/fr/jurassic-park
LE SEUIL DE L’AVENTURE
05
22. 23
• Côté mobile, une technologie cross-plateforme : Flutter
• Une seule application web en Next.js
• Un Back-For-Front commun entre web & mobile
• Des SDKs clients pour faciliter l’intégration des APIs
QUELQUES PRINCIPES DE DÉMARRAGE
26. 27
• Un processus d’intégration pour favoriser l’inner source
• Intégration continue : le moins possible de « stock de code »
• Tests auto & Continuous Delivery : master toujours livrable en production
• Mise en place d’ADR (Architecture Decision Records)
Créa%on branche
& env. dédié
Merge Request
& revue par les
Référents
Tests sur l'env.
dédié
Merge sur
master & suppr.
env. dédié
LE DÉBUT DES AJUSTEMENTS …POUR MAÎTRISER LA QUALITÉ
27. AU CŒUR DU DANGER
07
Illustration
:
https://www.bbc.com/afrique/monde-59416502
28. 29
VUE DU PIPELINE DE DÉPLOIEMENT
Illustration
:
https://www.allocine.fr/article/fichearticle_gen_carticle=18630016.html
31. 32
• Arrivée massive de développeurs 🚀
200 devs Mobile, Web, Back, Infra
• Equipes très hétérogènes ⚠
• 300+ environnements en // 🚀
• IDEs à bout de souffle 🥵
• CI en souffrance 🥵
• Tests auto parfois instables ⚠
L’ÉPREUVE DU PASSAGE À L’ÉCHELLE
Illustration
:
https://www.digitalspy.com/movies/a33561025/jurassic-world-3-set-photo-original-trilogy/
33. 34
• Mise en place de maturations avec les référents 🏭
• Plus de référents 👥
• Plus de temps
pour les référents ⏳
• Task forces CI ⚡
et tests e2e 🚥
CONTINUER D’AMÉLIORER, TOUJOURS
Illustration
:
https://www.slate.fr/story/102769/homme-dresser-velociraptors-jurassic-world
35. 36
• Algo de diff
• Marge Bot
• Code Owners
• (Merge Train)
CÔTÉ CI, PIPELINE & GITLAB
Notre CI
Illustration
:
https://www.slate.fr/story/102697/jurassic-park-world-erreur-nom
36. 37
• Cloud AWS :
hard/soft limits & throttling
• Qualité IaC
• Compte dédié
• Tests auto en cible
• Orchestration Kubernetes
POINTS D’ATTENTION SUR L’INFRA
Le Cloud Les plafonds
Les coûts
(Notre infra)
37. 38
GESTION DES ENVIRONNEMENTS & MERGE REQUESTS
• Extinction auto des envs
• Factorisation entre envs (Istio / Service Mesh)
• Liens entre Gitlab et JIRA
• Tableaux de bord : envs
• Tableaux de bord : merge requests
Illustration
:
https://www.cbsnews.com/pictures/jurassic-park-cast-where-are-they-now/
39. Quelques mois
(et beaucoup de MEPs)
plus tard…
Illustration
:
https://www.pixelcreation.fr/galerie/voir/jurassic-world/02-jurassic-world-main-street/
40. LE CHEMIN DU RETOUR
10
Illustration
:
https://www.fantrippers.com/fr/fanspots/isla-nublar/
41. 42
• Création d’une filière Engineering Managers
• Création de bootcamps 🧑🏫 : des formations
pour développer sur tel ou tel applicatif
APRÈS LE LANCEMENT EN PRODUCTION…
42. LE RETOUR DES HÉROS, TRANSFORMÉS
11
Illustra(on
:
h.ps://www.daily-movies.ch/jurassic-world-3-dominion
43. 44
NOTRE BILAN MONOREPO SUR SNCF CONNECT
👍 Le Monorepo fonctionne : de très
nombreux développeurs travaillent sur la
même codebase (avec davantage de contributions
du frontend au backend, du mobile au web, etc.)
🎓 Avec des efforts sur l’onboarding et la
formation continue
⚙ Avec des efforts sur l’automatisation et la
rationalisation de l’infra, du build, des outils
Illustration
:
https://www.purepeople.com/media/ariana-richards-sam-neill-et-joseph-maz_m7147405
44. AMÉLIORER LE MONDE ORDINAIRE
12
Illustration
:
https://autos.yahoo.com/jurassic-world-dominion-delayed-2022-074550242.html
45. 46
ET POUR LA SUITE…
• On a commencé à migrer dans le Monorepo
les briques historiques
• On reproduit la même stratégie Monorepo
pour nos autres projets majeurs (hors SNCF Connect)
• On continue d’agrandir l’équipe (Nantes Paris Lille)
https://jobs.connect-tech.sncf/
🪴🪴🪴
46. • Une approche Monorepo peut
réduire les « silos » 🧨 et améliorer
la collaboration des équipes ⚡
• Cela fonctionne à grande échelle 🚀
• Sous réserve d’efforts continus 💪
investir dans les outils ⚙
et les équipes 🫶
/
https://www.alamyimages.fr/ensemble-de-divers-dinosaures-isoles-personnage-de-dessin-anime-sur-fond-blanc-illustration-image438458856.html