2. 2
+
Agenda
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
Feature toggle
Properties
Monitoring
Extra
Pourquoi ?
Comment ?
Démo
Next Steps
Intro
Moi
Définition
Cas d’usages
Références
5. 5
+
Feature Toggle
check
« true »
Feature
OFF ON
« false »
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
6. 6
+
Feature Toggle +
Enable ?
« yes »
Feature
OFF ON
« no »
users ACL
Permissions
unauthorized
« granted »
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
7. 7
+
Feature Toggle ++
INTRODUCTION
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
Custom
strategy
« Predicate = true »
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
8. 8
+
Fork
branch « f1 »
Merge
branch « f2 »
conflicts
Release
Issues
=> Rollback
Release
Trunk
f1 =>
false
ReleaseRelease
Trunk
f2 => false
f1 => true
Issues
=> f1 = false
Avoid Feature branching
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
9. 9
+
Version N Version N+1
users beta testers
Dedicated infra?
Version N+1
F. Toggle
users beta testers
Check Profile
Canary Release
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
10. 10
+
Load-Balancer
Version N Version N
F. Toggle F. Toggle
« on »
Load-Balancer
Version N+1 Version N+1
F. Toggle F. Toggle
Load-Balancer
Version N Version N+1
Consistency ?
Blue / Green Deployments
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
11. 11
+
Load-Balancer
Version N Version N+1
Complex Policy
Version N+1 Version N+1
F. Toggle F. Toggle
Load-Balancer
Round robin
Check Weights
Dark Launch
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
13. 13
+
« Le Feature Toggle ne doit pas être perçu uniquement comme une
astuce technique pour éviter les branches (et introduire de la dette
technique).
Bien employé, il apporte une vraie souplesse et de la valeur ajoutée pour
adresser de nombreux cas d’usages à la fois techniques et métiers. »
Moi. et d’autres aussi…
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
14. 14
+
Agenda
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
FF4J
Feature toggle
Properties
Monitoring
Extra
JHipster
Pourquoi ?
Démo
Démo
Démo
Intro
Moi
Définition
Cas d’usages
Références
19. 19
+
Feature Store
App A
F. Toggle
App B
F. Toggle
Toggle Toggle
Storage
F. Toggle
Service
Admin
F. Toggle
Console
App A
F. Toggle
Client
App B
F. Toggle
Client
App C
F. Toggle
Client
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
FF4j
20. 20
+
Feature Store
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
FF4j
21. 21
+
Permissions
FF4j
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
FeatureStore
AuthorizationManager
Import/load
Inject/ Init
FF4j
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
22. 22
+
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
Custom
strategy
« Predicate = true »
Flipping Strategy
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
FF4j
23. 23
+
Administration Console
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
FF4j
24. 24
+
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
FF4j
25. 25
+
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
26. 26
+
Toggling through AOP
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
27. 27
+
Feature Group
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
28. 28
+
App1
ff4j
Store
Node B
ff4j
Store
Node A
App2
ff4j
Store
Node B
ff4j
Store
Node A
Cache Cache
App
ff4j
Store
Node B
ff4j
Store
Node A
Cache
FF4j
AuthorizationManager
FeatureStoreCacheProxy
FeatureStore
Caching
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
29. 29
+
Taglib + Thymeleaf
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
30. 30
+
ff4j
Store
App
REST API
PHP
JS
.NET
Devices
SECTION II : IMPLEMENTATION
REST API
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
31. 31
+
ff4j
Store
App
MBEAN
Support JMX
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
32. 32
+
SECTION II : IMPLEMENTATION
Monitoring
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
33. 33
+
Properties
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
34. 34
+
Property Store
SECTION II : IMPLEMENTATION
PropertyStore
FF4j
Import/load
Inject/ Init
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
35. 35
+
Autowiring
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
36. 36
+
Command Line Interface (CLI)
SECTION II : IMPLEMENTATION
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
37. 37
+
FF4j c’est de la balle , comment j’ai pu passé à coté ? J’ai trop envie de
le tester là maintenant.
Vous
38. 38
+
Agenda
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
FF4J
Feature toggle
Properties
Monitoring
Extra
JHipster
Pourquoi ?
Démo
Démo
Démo
Intro
Moi
Définition
Cas d’usages
Références
39. 39
+
Generator-ff4j ?
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
Feature
Toggle
Properties
Management
Monitoring
CLI
REST
API
SpringBoot
Starter
https://github.com/jhipster/generator-jhipster/issues/5801
Monitoring
REST
API
CRUD
Angular
GUI
Properties
Management
SpringBoot
Backend
40. 40
+
Generator-ff4j ?
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
Feature
Toggle
Properties
Management
Monitoring Monitoring
REST
API
CRUD
CLI
REST
API
SpringBoot
Starter
Angular
GUI
https://github.com/jhipster/generator-jhipster/issues/5801
Properties
Management
SpringBoot
Backend
41. 41
+
Generator-ff4j
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
42. 42
+
Generator-ff4j
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
43. 43
+
Generator-ff4j
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
44. 44
+
Generator-ff4j
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
45. 45
+
Generator-ff4j
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
46. 46
+
Generator-ff4j
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
47. 47
+
Generator-ff4j
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
48. 48
+
RoadMap
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
Bug Fixes Secure HTTP Servlet
Implement other DB : HBASE, NEO4J, …
Internationalization
Handle Cache
Jhipster Registry
NPM module for REST API (JHI Directive ?)
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Traitement, fonction, story, comportement
Qui traverse toutes les couches applicatives
Ce comportement peut être exécuté ou non
On lui donne un identifiant unique et l’on travaille avec.
Mais ce n’est pas une simple condition, on veut pouvoir changer sa valeur à chaud
Pourquoi ne pas implémenter ses propres conditions
pour savoir si c’est ON ou PAS
C’est bien uniquement si la feature est UP et que l’on est autorisé que l’on va évaluer votre condition
Idée :
ReleaseDate 12:00
J’espère que vous commencez à percevoir un potentiel ou vous posez des questions ?
Feature Branch :
Chaque équipe « branche » travailler sur sa version
Au moment la réintégration au trunk il y a des conflits avec les autres branches précédentes
Trunk-based development :
Tout le monde travaille sur la HEAD
A cause de releases fréquentes, du code doit partir en production alors qu’il n’est pas achevé
On doit l’encapsuler dans un test bloc qui n’est pas appelé.
AVANT :
Il fallait une infrastructure dédiée pour tester les nouveaux services
Maintenant une seule infrastructure est suffisante
Magic les trois nœuds s’activent en même temps… ou plantent en même temps
L’avantage ca reste que l’on peut toggle-OFF et aller secouer les développeurs
Un pourcentage de vos requêtes activent les nouvelles fonctions pour mesure un impact de perf
On doit changer le load-balancer et l’infra.
Plus besoin de changer de load balancer
Chaque serveur active pour une partie des requêtes
Avant :
Avec un trop grand nombre de requête entrante on peut écrouler un site marchand
Apres :
On peut identifier les requêtes à forts potentiels et les laisser passer et kicker les autres
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Ce que se traduit par le XML suivant
Ce que se traduit par le XML suivant
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap
Dans l’heure qui va suivre je vais vous présenter les différents éléments
Définir ou réfinir la notion de Feature Toggle
Présenter les différents cas d’usage où cela pourrait s’appliquer
Présenter mon framework FF4J
Présenter la roadmap