xebicon'17 : fluo, les choix déterminants pour une startup innovante et productive - arthur...

70

Upload: xebia-france

Post on 23-Jan-2018

87 views

Category:

Technology


0 download

TRANSCRIPT

Florent Le GallDéveloppeur full-stack @ Fluo

@flornt

Thierry AbaléaCTO @ Fluo

@ThierryAbalea

Arthur SudreDé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 codeVersionner 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 codeVersionner 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 codeVersionner 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 ContinueMartin 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 ES20173 - Modules (import / export)

…file.js

Le JS moderne chez Fluo

4 - Async / AwaitQuelques fonctionnalités fournies par ES2015, ES2016 et ES2017

Le JS moderne chez Fluo

Le JavaScript typé statiquementPourquoi ?

→ 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é statiquementTypeScript ou Flow ?

Le JS moderne chez Fluo

FlowComment typer ?

AFTER

Le JS moderne chez Fluo

FlowBénéficier de la complétion

AFTER

Le JS moderne chez Fluo

FlowTyper les payloads des APIs REST

AFTER

Client Serveur

Le JS moderne chez Fluo

FlowTyper 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

Gruntworkhttps://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 conclureEnjeux

→ 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 ES2017Classes

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 ES20171- Fat Arrow

Before After

Le JS moderne chez Fluo

4 - Async / Await

Avant Après

Quelques fonctionnalités fournies par ES2015, ES2016 et ES2017