Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Florent Le Gall
Développeur full-stack @ Fluo
@flornt
Thierry Abaléa
CTO @ Fluo
@ThierryAbalea
Arthur Sudre
Développeur fu...
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é
→...
→ Développer de nombreux services à
partir de composants métiers communs
→ Accroître la vélocité
→ Vaincre la spécialisati...
L’approche mono-repository
Mutualiser le code
→ Via les bibliothèques de code ?
→ Via des micro-services ?
On a toujours b...
L’approche mono-repository
Mutualiser le code
Versionner chaque bibliothèque et chaque service dans son repository ?
Servi...
L’approche mono-repository
Mutualiser le code
Versionner chaque bibliothèque et chaque service dans son repository ?
Servi...
L’approche mono-repository
Mutualiser le code
Versionner toutes les bibliothèque et services dans un seul repository !
Ser...
L’approche mono-repository
Pas d’Intégration Continue avec un workflow à base de branches
→ Contraire à l’Intégration Cont...
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 f...
L’approche mono-repository
Difficultés de l’approche monorepo
→ Upgrade global & atomique des versions des dépendances ext...
L’approche mono-repository
Disclaimer
Un monorepo n’implique pas une application monolithique
L’approche micro-services n’...
L’approche mono-repository
Conclusion
→ Apport majeur: l’Intégration Continue
→ Approche Trunk Based Development déstabili...
→ Développer de nombreux services à
partir de composants métiers communs
→ Accroître la vélocité
→ Vaincre la spécialisati...
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é...
Le JS moderne chez Fluo
JavaScript un choix évident pour Fluo ?
“One language to rule them all”
→ Typé dynamiquement par d...
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 fonctionn...
Le JS moderne chez Fluo
Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
3 - Modules (import / export)
…
fil...
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
→ Facil...
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...
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écialis...
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écialisati...
Historique - Des moyens rudimentaires
Infra As Code chez Fluo
→ Installation / Mise à jour des “middlewares”: apt-get
→ Dé...
Historique - Problèmes
Infra As Code chez Fluo
→ État (state) d’un serveur peu prédictible (non immutable)
→ Peur de mettr...
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 e...
Avantages de Docker sur Puppet/Chef/Ansible
Infra As Code chez Fluo
→ Testé et validé une fois pour toute depuis la CI
→ D...
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
...
Outils pour le provisioning et la configuration des ressources
AWS
Infra As Code chez Fluo
→ Outil de gestion de configura...
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 Clou...
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évelo...
Pour conclure
Enjeux
→ Développer de nombreux services à partir de composants métiers communs
→ Accroître la vélocité
→ Va...
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érie...
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...
Pourquoi le choix de terraform comme infra-as-code ?
Infra As Code chez Fluo
Tableau tiré de https://blog.gruntwork.io/why...
Exemple de l’usage de terraform
Infra As Code chez Fluo
example.tf
→ Télécharge les “providers” : provider.aws
…
…
…
→ Pla...
Exemple de l’usage de terraform
Infra As Code chez Fluo
→ Exécute le plan
…
→ Création des services
→ Sauvegarde d’un état...
Infra As Code chez Fluo
→ Exécute
example.tf
Exemple de l’usage de terraform
→ Mise à jour du service et sauvegarde de l’é...
Exemple de l’usage de terraform
Infra As Code chez Fluo
→ Planifie la destruction
→ Supprime l’instance
… → Sauvegarde du ...
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éch...
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
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et productive - Arthur Sudre, Florent Le Gall et Thie...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et productive - Arthur Sudre, Florent Le Gall et Thie...
XebiCon'17 : FLUO, les choix déterminants pour une startup innovante et productive - Arthur Sudre, Florent Le Gall et Thie...
Prochain SlideShare
Chargement dans…5
×

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

165 vues

Publié le

Nous vous proposons un retour d’expérience sur nos choix d’organisation axés autour de la productivité. Notre challenge : rendre une start-up adaptable au changement. Nos objectifs : être efficace pour développer des services, les mettre en production, les faire évoluer et recommencer.
Cette présentation illustrera les moyens organisationnels et techniques qui permettent à chaque membre du projet d’être capable d’intervenir sur l’ensemble des services développés. Nous aborderons entre autres l’agilité, l’infra-as-code (Terraform, AWS), le JavaScript moderne (ES2017, typage statique avec Flow, react native), l’approche mono-repository et la sécurité.
Nous expliquerons pourquoi nous avons fait ces choix et les difficultés que nous avons rencontrées.

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

  1. 1. Florent Le Gall Développeur full-stack @ Fluo @flornt Thierry Abaléa CTO @ Fluo @ThierryAbalea Arthur Sudre Développeur full-stack @ Xebia @ASudre
  2. 2. Produits d’assurance App mobile en B2C Fluo, c’est ... Multiples Intégrations en B2B
  3. 3. 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
  4. 4. → 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
  5. 5. 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 !
  6. 6. 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
  7. 7. 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 ?
  8. 8. L’approche mono-repository Mutualiser le code Versionner toutes les bibliothèque et services dans un seul repository ! Service B Common Library Service A
  9. 9. 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
  10. 10. L’approche mono-repository Trunk Based Development
  11. 11. 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 !
  12. 12. 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
  13. 13. L’approche mono-repository Disclaimer Un monorepo n’implique pas une application monolithique L’approche micro-services n’implique pas un repository par service
  14. 14. 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
  15. 15. → 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
  16. 16. Le JS moderne chez Fluo JavaScript un choix évident pour Fluo ? → Fluo sur mobile → Fluo sur le web Début 2016
  17. 17. Le JS moderne chez Fluo JavaScript un choix évident pour Fluo ? “One language to rule them all”
  18. 18. 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
  19. 19. 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
  20. 20. Le JS moderne chez Fluo 1- Décomposition (spreading) Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
  21. 21. Le JS moderne chez Fluo 2 - Affectation par décomposition (destructuring assignment) contractDetails.js Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
  22. 22. Le JS moderne chez Fluo Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017 3 - Modules (import / export) … file.js
  23. 23. Le JS moderne chez Fluo 4 - Async / Await Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017
  24. 24. 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
  25. 25. Le JS moderne chez Fluo Le JavaScript typé statiquement TypeScript ou Flow ?
  26. 26. Le JS moderne chez Fluo Flow Comment typer ? AFTER
  27. 27. Le JS moderne chez Fluo Flow Bénéficier de la complétion AFTER
  28. 28. Le JS moderne chez Fluo Flow Typer les payloads des APIs REST AFTER Client Serveur
  29. 29. Le JS moderne chez Fluo Flow Typer les propriétés des composants React
  30. 30. Choix de Node.js en backend Le JS moderne chez Fluo → Transpilation → Async / Await → Même langage entre le frontend et le backend
  31. 31. React.js pour les frontends Le JS moderne chez Fluo → Simple et facile → Expérience développeur au top !
  32. 32. 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
  33. 33. Les limites du tout JavaScript Le JS moderne chez Fluo → Faible maturité des APIs → Investissement en tooling nécessaire
  34. 34. → 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
  35. 35. 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)
  36. 36. 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
  37. 37. La transition Infra As Code chez Fluo Infra As Code Cloud
  38. 38. La transition Infra As Code chez Fluo Infra As Code
  39. 39. Infra As Code Infra As Code chez Fluo
  40. 40. Infra As Code Infra As Code chez Fluo
  41. 41. Le principe de docker Infra As Code chez Fluo
  42. 42. 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
  43. 43. 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
  44. 44. Immutable Infra As Code chez Fluo → Changement nécessaire ⇒ nouvelle image → Une image n’est pas modifiable
  45. 45. 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 - ...
  46. 46. 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
  47. 47. Terraform Infra As Code chez Fluo → particulièrement adapté à Docker → déclaratif : on décrit l’état attendu
  48. 48. Terraform Infra As Code chez Fluo → Ressources AWS gérées : EC2, ALB, RDS, IAM, VPC, ... → 70 providers : AWS, Google Cloud, Microsoft Azure, ...
  49. 49. Accompagnement Infra As Code chez Fluo Gruntwork https://gruntwork.io
  50. 50. Infra As Code chez Fluo
  51. 51. Conclusion Infra As Code chez Fluo → Approche immutable convaincante → Courbe d’apprentissage assez élevée pour des développeurs → Le pragmatisme paye
  52. 52. 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
  53. 53. React Native Web Le JS moderne chez Fluo → Un composant React Native dans le Back-office Fluo (React JS)
  54. 54. Qu’est-ce que le JS moderne pour Fluo ? Utiliser les fonctionnalités fournies par ES2015 et ES2017 Classes Before After
  55. 55. 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
  56. 56. Multi comptes AWS Infra As Code chez Fluo <schéma des comptes>
  57. 57. 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
  58. 58. 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
  59. 59. Exemple de l’usage de terraform Infra As Code chez Fluo example.tf → Télécharge les “providers” : provider.aws … … … → Planifie les changements
  60. 60. 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
  61. 61. Infra As Code chez Fluo → Exécute example.tf Exemple de l’usage de terraform → Mise à jour du service et sauvegarde de l’état
  62. 62. 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
  63. 63. 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
  64. 64. Exemple de l’usage de Packer Infra As Code chez Fluo example.json → Valider le fichier … → Exécuter
  65. 65. L’approche mono-repository Trunk Based Development → Les “release branches”
  66. 66. Le JS moderne chez Fluo Utiliser les fonctionnalités fournies par ES2015 et ES2017 1- Fat Arrow Before After
  67. 67. Le JS moderne chez Fluo 4 - Async / Await Avant Après Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017

×