1
PROPOSITION DE FEATURE TOGGLE
POUR JAVA
Cédrick Lunven
4 octobre 2018
2
About ME
https://github.com/clun
https://fr.linkedin.com/in/clunven
@clunven
Cédrick Lunven
Developer Advocate @ DataStax
3
Data
Service
Presentation
Feature
Feature
4
Feature Toggle
check
« true »
Feature
OFF ON
« false »
5
Feature Toggle +
Enable ?
« yes »
Feature
OFF ON
« no »
users ACL
Permissions
unauthorized
« granted »
6
Feature Toggle ++
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
Custom
strategy
« Predicate = true »
7
CONTINUOUS DELIVERY
Cas D’usages
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
Version N Version N+1
users beta testers
Dedicated infra?
Version N+1
F. Toggle
users beta testers
Check Profile
Canary Release
INTRODUCTION
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
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
12
INFRASTRUCTURE
Cas D’usages
13
Application
Ouverture
Des
SOLDES
DDOs
F. Toggle
Application
Graceful
degradation
14
Circuit
Breaker
Feature Toggle
Application
Behaviour
nominal
Behaviour
Degraded
FlippingStrategy
Supervision Tools
« off »
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
« 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…
17
ff4j.github.io
18
ff4j.github.io
git clone
https://github.com/ff4j/ff4j-
samples.git
cd ff4j-sample-springboot
mvn spring-boot:run
19
Feature
20
Feature
21
FeatureStore
FF4j
Import/load
Feature Store
Inject/ Init
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
23
Feature Store
FF4j
24
Permissions
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
FeatureStore
AuthorizationManager
Import/load
Inject/ Init
FF4j
25
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
Custom
strategy
« Predicate = true »
Flipping Strategy
26
Administration Console
Copyright @ 2017 Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
27
28
29
Toggling through AOP
30
Feature Group
31
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
32
Taglib + Thymeleaf
SECTION II : IMPLEMENTATION
33
ff4j
Store
App
REST API
PHP
JS
.NET
Devices
REST API
34
ff4j
Store
App
MBEAN
JMX Support
35
Monitoring
36
Properties
37
Property Store
PropertyStore
FF4j
Import/load
Inject/ Init
38
Autowiring
39
Command Line
Interface (CLI)
40
FF4j c’est de la balle , comment j’ai pu passé à coté ? J’ai trop envie de
le tester là maintenant.
Vous
41
RoadMap
FF4j v2  Q4 2018
• Support Java8+
• Data Model updates
 Auditability
 Security
 Simplify
• New user interface
 100% JS (Angular 6)
 Pluggable on REST API
• Stores
• AWS DynamoDB
42
Pourquoi pas vous ?
43
Test, comment, react, Tweet..
Thank You !
44
FF4j vs Togglz (1)

Riviera JUG ff4j

Notes de l'éditeur

  • #4 Traitement, fonction, story, comportement  Qui traverse toutes les couches applicatives
  • #5 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
  • #7 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 ?
  • #9 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é.
  • #10 AVANT : Il fallait une infrastructure dédiée pour tester les nouveaux services Maintenant une seule infrastructure est suffisante
  • #11 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
  • #12 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
  • #14 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
  • #15 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
  • #16 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
  • #20 Ce que se traduit par le XML suivant
  • #21 Ce que se traduit par le XML suivant
  • #42 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