SlideShare une entreprise Scribd logo
1  sur  70
Télécharger pour lire hors ligne
Florent Le Gall
Développeur full-stack @ Fluo
@flornt
Thierry Abaléa
CTO @ Fluo
@ThierryAbalea
Arthur Sudre
Développeur full-stack @ Xebia
@ASudre
Produits d’assurance App mobile en B2C
Fluo, c’est ...
Multiples Intégrations en B2B
Fluo
Les enjeux de Fluo
→ Développer de nombreux services à
partir de composants métiers communs
→ Accroître la vélocité
→ Vaincre la spécialisation
→ Faciliter le recrutement
→ Garantir fiabilité et sécurité dans le
contexte bancaire / assurantiel
Mono-repo JS Moderne Infra As Code
→ Développer de nombreux services à
partir de composants métiers communs
→ Accroître la vélocité
→ Vaincre la spécialisation
→ Faciliter le recrutement
→ Garantir fiabilité et sécurité dans le
contexte bancaire / assurantiel
Mono-repo
L’approche mono-repository
Mutualiser le code
→ Via les bibliothèques de code ?
→ Via des micro-services ?
On a toujours besoin de bibliothèques de code !
L’approche mono-repository
Mutualiser le code
Versionner chaque bibliothèque et chaque service dans son repository ?
Service B
Common Library
Service A
V1
Uses CommonLibrary@V1 Uses CommonLibrary@V1
V1V1
L’approche mono-repository
Mutualiser le code
Versionner chaque bibliothèque et chaque service dans son repository ?
Service B
Common Library
Service A
V2
Uses CommonLibrary@V2 Uses CommonLibrary@V1
V1V2
→ Qui modifie le service B ?
L’approche mono-repository
Mutualiser le code
Versionner toutes les bibliothèque et services dans un seul repository !
Service B
Common Library
Service A
L’approche mono-repository
Pas d’Intégration Continue avec un workflow à base de branches
→ Contraire à l’Intégration Continue
Martin Fowler: “ The whole idea is that nobody is working on a code base that deviates significantly from
anyone else’s. ”
→ Refactorisations transverses extrêmement compliquées
→ Travail des développeurs en silo
L’approche mono-repository
Trunk Based Development
L’approche mono-repository
Trunk Based Development
→ Comment s’assurer qu’on peut releaser à tout le moment ?
→ Grâce au feature toggles !
→ Les features toggles doivent être testées !
L’approche mono-repository
Difficultés de l’approche monorepo
→ Upgrade global & atomique des versions des dépendances extérieures
→ Exige une équipe polyvalente et un travail d’équipe
→ Codes Review plus difficiles avec les outils standards
L’approche mono-repository
Disclaimer
Un monorepo n’implique pas une application monolithique
L’approche micro-services n’implique pas un repository par service
L’approche mono-repository
Conclusion
→ Apport majeur: l’Intégration Continue
→ Approche Trunk Based Development déstabilisante pour les nouveaux
→ Pré-requis : une équipe “mature” et une dette technique maîtrisée
→ Développer de nombreux services à
partir de composants métiers communs
→ Accroître la vélocité
→ Vaincre la spécialisation
→ Faciliter le recrutement
→ Garantir fiabilité et sécurité dans le
contexte bancaire / assurantiel
JS Moderne
Le JS moderne chez Fluo
JavaScript un choix évident pour Fluo ?
→ Fluo sur mobile → Fluo sur le web
Début 2016
Le JS moderne chez Fluo
JavaScript un choix évident pour Fluo ?
“One language to rule them all”
Le JS moderne chez Fluo
JavaScript un choix évident pour Fluo ?
“One language to rule them all”
→ Typé statiquement par défaut
→ Très approprié pour les backends
→ Plutôt exotique sur les frontends
Le JS moderne chez Fluo
JavaScript un choix évident pour Fluo ?
“One language to rule them all”
→ Typé dynamiquement par défaut
→ Approprié pour les backends
→ Très approprié pour les frontends
Le JS moderne chez Fluo
1- Décomposition (spreading)
Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
Le JS moderne chez Fluo
2 - Affectation par décomposition (destructuring assignment)
contractDetails.js
Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
Le JS moderne chez Fluo
Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
3 - Modules (import / export)
…
file.js
Le JS moderne chez Fluo
4 - Async / Await
Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
Le JS moderne chez Fluo
Le JavaScript typé statiquement
Pourquoi ?
→ Un filet de sécurité
→ Aider au développement
→ Faciliter les changements dans le code
→ Garantir la cohérence dans le code
Le JS moderne chez Fluo
Le JavaScript typé statiquement
TypeScript ou Flow ?
Le JS moderne chez Fluo
Flow
Comment typer ?
AFTER
Le JS moderne chez Fluo
Flow
Bénéficier de la complétion
AFTER
Le JS moderne chez Fluo
Flow
Typer les payloads des APIs REST
AFTER
Client Serveur
Le JS moderne chez Fluo
Flow
Typer les propriétés des composants React
Choix de Node.js en backend
Le JS moderne chez Fluo
→ Transpilation
→ Async / Await
→ Même langage entre le frontend et le backend
React.js pour les frontends
Le JS moderne chez Fluo
→ Simple et facile
→ Expérience développeur au top !
React Native pour le mobile
Le JS moderne chez Fluo
→ Expérience développeur aussi bonne que sur le web
→ Pas de spécialisation Android / iOS
Les limites du tout JavaScript
Le JS moderne chez Fluo
→ Faible maturité des APIs
→ Investissement en tooling nécessaire
→ Développer de nombreux services à
partir de composants métiers communs
→ Accroître la vélocité
→ Vaincre la spécialisation
→ Faciliter le recrutement
→ Garantir fiabilité et sécurité dans le
contexte bancaire / assurantiel
Infra As Code
Historique - Des moyens rudimentaires
Infra As Code chez Fluo
→ Installation / Mise à jour des “middlewares”: apt-get
→ Déploiement des applications Fluo: tar, scp & ssh
→ OVH VPS (Virtual Private Server)
Historique - Problèmes
Infra As Code chez Fluo
→ État (state) d’un serveur peu prédictible (non immutable)
→ Peur de mettre à jour les packages (Apache, Tomcat, ...)
→ Déploiements fastidieux et sujets aux erreurs
La transition
Infra As Code chez Fluo
Infra As Code
Cloud
La transition
Infra As Code chez Fluo
Infra As Code
Infra As Code
Infra As Code chez Fluo
Infra As Code
Infra As Code chez Fluo
Le principe de docker
Infra As Code chez Fluo
Pourquoi le choix de docker ?
Infra As Code chez Fluo
→ facilité de déploiement
→ portabilité
→ légèreté (mémoire disque et RAM)
→ orientation micro-services
Avantages de Docker sur Puppet/Chef/Ansible
Infra As Code chez Fluo
→ Testé et validé une fois pour toute depuis la CI
→ Déploiement atomique: pas de dérive de la configuration
→ Même livrable partout
Immutable
Infra As Code chez Fluo
→ Changement nécessaire ⇒ nouvelle image
→ Une image n’est pas modifiable
Et le reste ?
Infra As Code chez Fluo
→ Tout élément d’infra n’est pas basé sur une image :
- DNS
- Bucket S3
- VPC
- RDS
- Règles Firewall
- ...
Outils pour le provisioning et la configuration des ressources
AWS
Infra As Code chez Fluo
→ Outil de gestion de configuration :
- Puppet
- Ansible
- Chef
→ Outils d’orchestration :
- AWS Cloudformation
- HashiCorp Terraform
→ AWS SDK
Terraform
Infra As Code chez Fluo
→ particulièrement adapté à Docker
→ déclaratif : on décrit l’état attendu
Terraform
Infra As Code chez Fluo
→ Ressources AWS gérées : EC2, ALB, RDS, IAM, VPC, ...
→ 70 providers : AWS, Google Cloud, Microsoft Azure, ...
Accompagnement
Infra As Code chez Fluo
Gruntwork
https://gruntwork.io
Infra As Code chez Fluo
Conclusion
Infra As Code chez Fluo
→ Approche immutable convaincante
→ Courbe d’apprentissage assez élevée pour des développeurs
→ Le pragmatisme paye
Pour conclure
Enjeux
→ Développer de nombreux services à partir de composants métiers communs
→ Accroître la vélocité
→ Vaincre la spécialisation
→ Faciliter le recrutement
→ Garantir fiabilité et sécurité dans le contexte bancaire / assurantiel
React Native Web
Le JS moderne chez Fluo
→ Un composant React
Native dans le
Back-office Fluo (React
JS)
Qu’est-ce que le JS moderne pour Fluo ?
Utiliser les fonctionnalités fournies par ES2015 et ES2017
Classes
Before After
Paradigme fonctionnel
Qu’est-ce que le JS moderne pour Fluo ?
→ Immutabilité
→ Fonctions pures
→ Fonctions d’ordre supérieur
Notions utilisées
Fonctions classiques
→ map
→ filter
→ reduce
Exemple
Multi comptes AWS
Infra As Code chez Fluo
<schéma des comptes>
Multi comptes AWS
Infra As Code chez Fluo
→ Le multi comptes a un léger surcoût mais le ROI est clair
→ Meilleur isolation entre comptes en terme de:
● sécurité (IAM perfectible)
● auditabilité
● coût: visibilité par environment
Pourquoi le choix de terraform comme infra-as-code ?
Infra As Code chez Fluo
Tableau tiré de https://blog.gruntwork.io/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c
Chef Puppet Ansible SaltStack CloudFormation Terraform
Code Open source Open source Open source Open source Closed source Open source
Cloud All All All All AWS only All
Type Config Mgmt Config Mgmt Config Mgmt Config Mgmt Orchestration Orchestration
Infrastructure Mutable Mutable Mutable Mutable Immutable Immutable
Language Procedural Declarative Procedural Declarative Declarative Declarative
Architecture Client/Server Client/Server Client-Only Client/Server Client-Only Client-Only
Exemple de l’usage de terraform
Infra As Code chez Fluo
example.tf
→ Télécharge les “providers” : provider.aws
…
…
…
→ Planifie les changements
Exemple de l’usage de terraform
Infra As Code chez Fluo
→ Exécute le plan
…
→ Création des services
→ Sauvegarde d’un état
● terraform.tfstate
● terraform.tfstate.backup
Infra As Code chez Fluo
→ Exécute
example.tf
Exemple de l’usage de terraform
→ Mise à jour du service et sauvegarde de l’état
Exemple de l’usage de terraform
Infra As Code chez Fluo
→ Planifie la destruction
→ Supprime l’instance
… → Sauvegarde du nouvel état
● terraform.tfstate
● terraform.tfstate.backup
→ Suppression des services
Exemple de l’usage de Docker
Infra As Code chez Fluo
Image de base : node:7.10
Création du dossier de
l’application
Téléchargement des modules
Copie du mono-repo
Remplacement des données
sensibles grâces aux clés AWS
Compilation de l’application
Commande d’exécution de l’imageDockerfile
Exemple de l’usage de Packer
Infra As Code chez Fluo
example.json
→ Valider le fichier
…
→ Exécuter
L’approche mono-repository
Trunk Based Development
→ Les “release branches”
Le JS moderne chez Fluo
Utiliser les fonctionnalités fournies par ES2015 et ES2017
1- Fat Arrow
Before After
Le JS moderne chez Fluo
4 - Async / Await
Avant Après
Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017

Contenu connexe

Tendances

Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
Xavier Gorse
 

Tendances (20)

Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET Core
 
DevOps : mission [im]possible ?
DevOps : mission [im]possible ?DevOps : mission [im]possible ?
DevOps : mission [im]possible ?
 
ASP.NET 5: la révolution est en marche
ASP.NET 5: la révolution est en marcheASP.NET 5: la révolution est en marche
ASP.NET 5: la révolution est en marche
 
ASP.NET MVC 6
ASP.NET MVC 6ASP.NET MVC 6
ASP.NET MVC 6
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
XebiCon'17 : Construire des applications résilientes en multi-cloud - Bastien...
XebiCon'17 : Construire des applications résilientes en multi-cloud - Bastien...XebiCon'17 : Construire des applications résilientes en multi-cloud - Bastien...
XebiCon'17 : Construire des applications résilientes en multi-cloud - Bastien...
 
XebiCon'17 : Serverless is the new back - Jérémy Pinsolle et Gérôme Egron
XebiCon'17 : Serverless is the new back - Jérémy Pinsolle et Gérôme EgronXebiCon'17 : Serverless is the new back - Jérémy Pinsolle et Gérôme Egron
XebiCon'17 : Serverless is the new back - Jérémy Pinsolle et Gérôme Egron
 
OpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureOpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse Faure
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
 
Comment identifier et analyser les contenus conspiratoire sur Youtube
Comment identifier et analyser les contenus conspiratoire sur YoutubeComment identifier et analyser les contenus conspiratoire sur Youtube
Comment identifier et analyser les contenus conspiratoire sur Youtube
 
01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière 01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière
 
Symposium TFS - DevOps avec Microsoft
Symposium TFS - DevOps avec MicrosoftSymposium TFS - DevOps avec Microsoft
Symposium TFS - DevOps avec Microsoft
 
Jenkins Workflow
Jenkins WorkflowJenkins Workflow
Jenkins Workflow
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
 
Event sourcing avec Kafka, UPEC
Event sourcing avec Kafka, UPECEvent sourcing avec Kafka, UPEC
Event sourcing avec Kafka, UPEC
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 

Similaire à XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et productive - Arthur Sudre, Florent Le Gall et Thierry Abaléa

Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
ENSIBS
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
boulonvert
 

Similaire à XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et productive - Arthur Sudre, Florent Le Gall et Thierry Abaléa (20)

Construire Des Applications Cloud Natives - SymfonyLive Paris 2016
Construire Des Applications Cloud Natives - SymfonyLive Paris 2016Construire Des Applications Cloud Natives - SymfonyLive Paris 2016
Construire Des Applications Cloud Natives - SymfonyLive Paris 2016
 
DevOps, quel futur pour les Ops ?
DevOps, quel futur pour les Ops ?DevOps, quel futur pour les Ops ?
DevOps, quel futur pour les Ops ?
 
Cours cordova & REST
Cours cordova & RESTCours cordova & REST
Cours cordova & REST
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 
La Duck Conf - "Microservices & Servicemesh : le retour des frameworks d'entr...
La Duck Conf - "Microservices & Servicemesh : le retour des frameworks d'entr...La Duck Conf - "Microservices & Servicemesh : le retour des frameworks d'entr...
La Duck Conf - "Microservices & Servicemesh : le retour des frameworks d'entr...
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne
Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderneGab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne
Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne
 
Coder sans coder : Delphi en mode no code !
Coder sans coder : Delphi en mode no code !Coder sans coder : Delphi en mode no code !
Coder sans coder : Delphi en mode no code !
 
Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...
 
Développement mobile cross-plateform
Développement mobile cross-plateformDéveloppement mobile cross-plateform
Développement mobile cross-plateform
 
Devforumfrancois Tonic
Devforumfrancois TonicDevforumfrancois Tonic
Devforumfrancois Tonic
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
 
Introduction à web assembly
Introduction à web assemblyIntroduction à web assembly
Introduction à web assembly
 
#1 cloud-infra-talk- l ops-du-devops
#1 cloud-infra-talk- l ops-du-devops#1 cloud-infra-talk- l ops-du-devops
#1 cloud-infra-talk- l ops-du-devops
 
Introduction a Flutter
Introduction a FlutterIntroduction a Flutter
Introduction a Flutter
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne
 

Plus de Publicis Sapient Engineering

Plus de Publicis Sapient Engineering (20)

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
 
Xebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to CloudXebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to Cloud
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
XebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern InfrastructureXebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern Infrastructure
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
 
XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilité
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID Connect
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
 
XebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an aprèsXebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an après
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
 

XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et productive - Arthur Sudre, Florent Le Gall et Thierry Abaléa

  • 1.
  • 2. Florent Le Gall Développeur full-stack @ Fluo @flornt Thierry Abaléa CTO @ Fluo @ThierryAbalea Arthur Sudre Développeur full-stack @ Xebia @ASudre
  • 3. Produits d’assurance App mobile en B2C Fluo, c’est ... Multiples Intégrations en B2B
  • 4. Fluo Les enjeux de Fluo → Développer de nombreux services à partir de composants métiers communs → Accroître la vélocité → Vaincre la spécialisation → Faciliter le recrutement → Garantir fiabilité et sécurité dans le contexte bancaire / assurantiel Mono-repo JS Moderne Infra As Code
  • 5. → Développer de nombreux services à partir de composants métiers communs → Accroître la vélocité → Vaincre la spécialisation → Faciliter le recrutement → Garantir fiabilité et sécurité dans le contexte bancaire / assurantiel Mono-repo
  • 6. L’approche mono-repository Mutualiser le code → Via les bibliothèques de code ? → Via des micro-services ? On a toujours besoin de bibliothèques de code !
  • 7. L’approche mono-repository Mutualiser le code Versionner chaque bibliothèque et chaque service dans son repository ? Service B Common Library Service A V1 Uses CommonLibrary@V1 Uses CommonLibrary@V1 V1V1
  • 8. L’approche mono-repository Mutualiser le code Versionner chaque bibliothèque et chaque service dans son repository ? Service B Common Library Service A V2 Uses CommonLibrary@V2 Uses CommonLibrary@V1 V1V2 → Qui modifie le service B ?
  • 9. L’approche mono-repository Mutualiser le code Versionner toutes les bibliothèque et services dans un seul repository ! Service B Common Library Service A
  • 10. L’approche mono-repository Pas d’Intégration Continue avec un workflow à base de branches → Contraire à l’Intégration Continue Martin Fowler: “ The whole idea is that nobody is working on a code base that deviates significantly from anyone else’s. ” → Refactorisations transverses extrêmement compliquées → Travail des développeurs en silo
  • 12. L’approche mono-repository Trunk Based Development → Comment s’assurer qu’on peut releaser à tout le moment ? → Grâce au feature toggles ! → Les features toggles doivent être testées !
  • 13. L’approche mono-repository Difficultés de l’approche monorepo → Upgrade global & atomique des versions des dépendances extérieures → Exige une équipe polyvalente et un travail d’équipe → Codes Review plus difficiles avec les outils standards
  • 14. L’approche mono-repository Disclaimer Un monorepo n’implique pas une application monolithique L’approche micro-services n’implique pas un repository par service
  • 15. L’approche mono-repository Conclusion → Apport majeur: l’Intégration Continue → Approche Trunk Based Development déstabilisante pour les nouveaux → Pré-requis : une équipe “mature” et une dette technique maîtrisée
  • 16. → Développer de nombreux services à partir de composants métiers communs → Accroître la vélocité → Vaincre la spécialisation → Faciliter le recrutement → Garantir fiabilité et sécurité dans le contexte bancaire / assurantiel JS Moderne
  • 17. Le JS moderne chez Fluo JavaScript un choix évident pour Fluo ? → Fluo sur mobile → Fluo sur le web Début 2016
  • 18. Le JS moderne chez Fluo JavaScript un choix évident pour Fluo ? “One language to rule them all”
  • 19. Le JS moderne chez Fluo JavaScript un choix évident pour Fluo ? “One language to rule them all” → Typé statiquement par défaut → Très approprié pour les backends → Plutôt exotique sur les frontends
  • 20. Le JS moderne chez Fluo JavaScript un choix évident pour Fluo ? “One language to rule them all” → Typé dynamiquement par défaut → Approprié pour les backends → Très approprié pour les frontends
  • 21. Le JS moderne chez Fluo 1- Décomposition (spreading) Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
  • 22. Le JS moderne chez Fluo 2 - Affectation par décomposition (destructuring assignment) contractDetails.js Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
  • 23. Le JS moderne chez Fluo Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017 3 - Modules (import / export) … file.js
  • 24. Le JS moderne chez Fluo 4 - Async / Await Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
  • 25. Le JS moderne chez Fluo Le JavaScript typé statiquement Pourquoi ? → Un filet de sécurité → Aider au développement → Faciliter les changements dans le code → Garantir la cohérence dans le code
  • 26. Le JS moderne chez Fluo Le JavaScript typé statiquement TypeScript ou Flow ?
  • 27. Le JS moderne chez Fluo Flow Comment typer ? AFTER
  • 28. Le JS moderne chez Fluo Flow Bénéficier de la complétion AFTER
  • 29. Le JS moderne chez Fluo Flow Typer les payloads des APIs REST AFTER Client Serveur
  • 30. Le JS moderne chez Fluo Flow Typer les propriétés des composants React
  • 31. Choix de Node.js en backend Le JS moderne chez Fluo → Transpilation → Async / Await → Même langage entre le frontend et le backend
  • 32. React.js pour les frontends Le JS moderne chez Fluo → Simple et facile → Expérience développeur au top !
  • 33. React Native pour le mobile Le JS moderne chez Fluo → Expérience développeur aussi bonne que sur le web → Pas de spécialisation Android / iOS
  • 34. Les limites du tout JavaScript Le JS moderne chez Fluo → Faible maturité des APIs → Investissement en tooling nécessaire
  • 35. → Développer de nombreux services à partir de composants métiers communs → Accroître la vélocité → Vaincre la spécialisation → Faciliter le recrutement → Garantir fiabilité et sécurité dans le contexte bancaire / assurantiel Infra As Code
  • 36. Historique - Des moyens rudimentaires Infra As Code chez Fluo → Installation / Mise à jour des “middlewares”: apt-get → Déploiement des applications Fluo: tar, scp & ssh → OVH VPS (Virtual Private Server)
  • 37. Historique - Problèmes Infra As Code chez Fluo → État (state) d’un serveur peu prédictible (non immutable) → Peur de mettre à jour les packages (Apache, Tomcat, ...) → Déploiements fastidieux et sujets aux erreurs
  • 38. La transition Infra As Code chez Fluo Infra As Code Cloud
  • 39. La transition Infra As Code chez Fluo Infra As Code
  • 40. Infra As Code Infra As Code chez Fluo
  • 41. Infra As Code Infra As Code chez Fluo
  • 42. Le principe de docker Infra As Code chez Fluo
  • 43. Pourquoi le choix de docker ? Infra As Code chez Fluo → facilité de déploiement → portabilité → légèreté (mémoire disque et RAM) → orientation micro-services
  • 44. Avantages de Docker sur Puppet/Chef/Ansible Infra As Code chez Fluo → Testé et validé une fois pour toute depuis la CI → Déploiement atomique: pas de dérive de la configuration → Même livrable partout
  • 45. Immutable Infra As Code chez Fluo → Changement nécessaire ⇒ nouvelle image → Une image n’est pas modifiable
  • 46. Et le reste ? Infra As Code chez Fluo → Tout élément d’infra n’est pas basé sur une image : - DNS - Bucket S3 - VPC - RDS - Règles Firewall - ...
  • 47. Outils pour le provisioning et la configuration des ressources AWS Infra As Code chez Fluo → Outil de gestion de configuration : - Puppet - Ansible - Chef → Outils d’orchestration : - AWS Cloudformation - HashiCorp Terraform → AWS SDK
  • 48. Terraform Infra As Code chez Fluo → particulièrement adapté à Docker → déclaratif : on décrit l’état attendu
  • 49. Terraform Infra As Code chez Fluo → Ressources AWS gérées : EC2, ALB, RDS, IAM, VPC, ... → 70 providers : AWS, Google Cloud, Microsoft Azure, ...
  • 50. Accompagnement Infra As Code chez Fluo Gruntwork https://gruntwork.io
  • 51. Infra As Code chez Fluo
  • 52. Conclusion Infra As Code chez Fluo → Approche immutable convaincante → Courbe d’apprentissage assez élevée pour des développeurs → Le pragmatisme paye
  • 53. Pour conclure Enjeux → Développer de nombreux services à partir de composants métiers communs → Accroître la vélocité → Vaincre la spécialisation → Faciliter le recrutement → Garantir fiabilité et sécurité dans le contexte bancaire / assurantiel
  • 54.
  • 55.
  • 56. React Native Web Le JS moderne chez Fluo → Un composant React Native dans le Back-office Fluo (React JS)
  • 57. Qu’est-ce que le JS moderne pour Fluo ? Utiliser les fonctionnalités fournies par ES2015 et ES2017 Classes Before After
  • 58. Paradigme fonctionnel Qu’est-ce que le JS moderne pour Fluo ? → Immutabilité → Fonctions pures → Fonctions d’ordre supérieur Notions utilisées Fonctions classiques → map → filter → reduce Exemple
  • 59. Multi comptes AWS Infra As Code chez Fluo <schéma des comptes>
  • 60. Multi comptes AWS Infra As Code chez Fluo → Le multi comptes a un léger surcoût mais le ROI est clair → Meilleur isolation entre comptes en terme de: ● sécurité (IAM perfectible) ● auditabilité ● coût: visibilité par environment
  • 61. Pourquoi le choix de terraform comme infra-as-code ? Infra As Code chez Fluo Tableau tiré de https://blog.gruntwork.io/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c Chef Puppet Ansible SaltStack CloudFormation Terraform Code Open source Open source Open source Open source Closed source Open source Cloud All All All All AWS only All Type Config Mgmt Config Mgmt Config Mgmt Config Mgmt Orchestration Orchestration Infrastructure Mutable Mutable Mutable Mutable Immutable Immutable Language Procedural Declarative Procedural Declarative Declarative Declarative Architecture Client/Server Client/Server Client-Only Client/Server Client-Only Client-Only
  • 62. Exemple de l’usage de terraform Infra As Code chez Fluo example.tf → Télécharge les “providers” : provider.aws … … … → Planifie les changements
  • 63. Exemple de l’usage de terraform Infra As Code chez Fluo → Exécute le plan … → Création des services → Sauvegarde d’un état ● terraform.tfstate ● terraform.tfstate.backup
  • 64. Infra As Code chez Fluo → Exécute example.tf Exemple de l’usage de terraform → Mise à jour du service et sauvegarde de l’état
  • 65. Exemple de l’usage de terraform Infra As Code chez Fluo → Planifie la destruction → Supprime l’instance … → Sauvegarde du nouvel état ● terraform.tfstate ● terraform.tfstate.backup → Suppression des services
  • 66. Exemple de l’usage de Docker Infra As Code chez Fluo Image de base : node:7.10 Création du dossier de l’application Téléchargement des modules Copie du mono-repo Remplacement des données sensibles grâces aux clés AWS Compilation de l’application Commande d’exécution de l’imageDockerfile
  • 67. Exemple de l’usage de Packer Infra As Code chez Fluo example.json → Valider le fichier … → Exécuter
  • 68. L’approche mono-repository Trunk Based Development → Les “release branches”
  • 69. Le JS moderne chez Fluo Utiliser les fonctionnalités fournies par ES2015 et ES2017 1- Fat Arrow Before After
  • 70. Le JS moderne chez Fluo 4 - Async / Await Avant Après Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017