Introduction to feature toggle, a list of use cases and illustration with the ff4j framework. As founder i presented the reference customer, the capibilities and the roadmap
3. 3
I. Introduction
III. FF4J
Agenda
Continuous Delivery
Infrastructure
Business Toggle
About me
Feature Toggle
Introduction
Main concepts
Capabilities
Resources
Backlog
Recrutement
II. Use Cases
IV. Bonus Tracks
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
6. 6
Feature Toggle
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
check
« true »
Feature
OFF ON
« false »
7. 7
Feature Toggle
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
8. 8
Feature Toggle
Enable & disable Features
At Runtime
Through dedicated GUI
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
INTRODUCTION
9. 9
Feature Toggle +
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
INTRODUCTION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
10. 10
Here is the
Magic
Feature Toggle ++
INTRODUCTION
Business Toggle
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
Custom
strategy
« Predicate = true »
11. 11
I. Introduction
III. FF4J
Agenda
Continuous Delivery
Infrastructure
Business Toggle
Introduction
Main concepts
Capabilities
Resources
Backlog
Recrutement
II. Use cases
IV. Bonus Tracks
I. Introduction
About me
Feature Toggling ?
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
12. 12
USE CASES
Use cases
Continuous Delivery
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
13. 13
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
CONTINOUS DELIVERY : : USE CASES
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
14. 14
Version N Version N+1
users beta testers
Dedicated infra?
Version N+1
F. Toggle
users beta testers
Check Profile
Canary Release
CONTINOUS DELIVERY : : USE CASES
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
15. 15
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
CONTINOUS DELIVERY : : USE CASES
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
16. 16
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
CONTINOUS DELIVERY : : USE CASES
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
17. 17
USE CASES
Use cases
Architecture & Infrastructure
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
19. 19
Default
resources
Feature Toggle
Degraded
Behaviour
Application
ARCHITECTURE : : USE CASES
Circuit Breaker
Toggle
“OFF”
Breaker Strategy
Monitoring
Toggle
“OFF”
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
20. 20
Default
resources
#2 -Toggle
“OFF”
F. Toggle
Strategy
#1 - Check :
•Availability
•Latency,
•Response time,
•Errors…
Degraded
Behaviour
Application
Networking et Security
WhiteList
BlackList
HostName
Throttling
ARCHITECTURE : : USE CASES
Load Balancing
Region Based
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
21. 21
USE CASES
Use cases
Business Toggle
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
23. 23
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.
Synthèse
USE CASES
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
24. 24
I. Introduction
III. FF4J
Agenda
Continuous Delivery
Infrastructure
Business Toggle
About me
Feature Toggling ?
Introduction
Main concepts
Capabilities
Resources
Backlog
Recruitment
II. Use cases
IV. Bonus Tracks
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
25. 25
FF4J (ff4j.org)
Feature Flipping for Java
Created in 2013
Github (84✭)
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
26. 26
Maven Central
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
27. 27
Feature
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
28. 28
Feature
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
30. 30
Feature Store
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
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
31. 31
Feature Store
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
32. 32
FF4j
SECTION II : IMPLEMENTATION
FeatureStore
FF4j
Import/load
Inject/ Init
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
33. 33
Permissions
SECTION II : IMPLEMENTATION
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
FeatureStore
AuthorizationManager
Import/load
Inject/ Init
FF4j
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
34. 34
Roles
Integration Spring
Permissions
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
35. 35
Enable ?
« yes »
Feature
OFF ON
« no »
Permissio
ns
unauthorized
« granted »
users ACL
Custom
strategy
« Predicate = true »
Flipping Strategy
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
36. 36
Administration Console
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
37. 37Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
40. 40
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 @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
41. 41
Taglib
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
44. 44
ff4j
Store
App
Console
REST API
Console StandAlone
Console standalone
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
SECTION II : IMPLEMENTATION
46. 46
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
. . .Monitoring
47. 47
ff4j
Store
App
MBEAN
Support JMX
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
SECTION II : IMPLEMENTATION
48. 48
Properties
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
49. 49
Property Store
SECTION II : IMPLEMENTATION
PropertyStore
FF4j
Import/load
Inject/ Init
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
50. 50
Property Store
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
51. 51
Autowiring !
SECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
52. 52
I. Introduction
III. FF4J
Agenda
Continuous Delivery
Infrastructure
Business Toggle
Introduction
Main Concepts
Capabilities
Resources
Backlog
Recrutement
II. Use cases
IV. Bonus Tracks
About me
Feature Toggling ?
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité -
Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
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
Cela fait une dizaine d’années que je tourne sur le terrain
Je sors de l’ISIMA à Clermont-Ferrand
J’ai fait 5 ans chez Unilog - et encore 5 ans chez OCTO Technology
Aujourd’hui je suis Architecte Solution chez SoftwareAG
Missions : Dev – Conseil – Architecture – Vente
Compétences : JAVA et INTEGRATION
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
…. Au travers d’une console dédiée
Qui permet d’activer/desactiver bien sur mais aussi créer/éditer/supprimer.
Ma définition du feature toggle est donc la capacité pour un système
d’activer ou désactiver des fonctionnalités
à chaud
Au travers d’une console dédiée
Cette définition est bien mais elle n’est pas complète…
En plus de son statut ON ou OFF ….
…On peut activer une fonctionnalité pour une sous population (BETA TESTEUR)
Le feature toggle peut même aller plus loin
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 ?
Alors je vous propose des cas d’usages auxquels
Vous n’avez peut être pas pensé.
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