Le "feature toggle", ou la capacité à activer ou désactiver une fonctionnalité à chaud, est souvent associée à une astuce de développement au service du Continuous Delivery. On peut pousser du code en production qui n'est pas complètement finalisé et introduire de la dette technique... mais il peut être tellement plus utile !!!!! Après un panorama de quelques cas d'usages très concrets, je vous propose de détailler les capacités du framework FF4J, les choix d'implémentation, les références en production, les killers features ainsi que les prochaines évolutions.
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
9. 9
Version N Version N+1
users beta testers
Dedicated infra?
Version N+1
F. Toggle
users beta testers
Check Profile
Canary Release
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
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
15. 15
Network
Security
Default
resources
F. Toggle
Strategy
#1 - Check :
•Availability
•Latency,
•Response time,
•Errors…
Behaviour B
Behaviour
Application
WhiteList
BlackList
HostName
Throttling
Load Balancing
Region Based
Service
Registry
Client Type
FailOver
Authentication
16. 16
« 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…
22. 22
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
FF4j
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
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
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
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