introduction to feature toggle and ff4j
TRANSCRIPT
www.parisjug.org
1Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
2
PROPOSITION DE
FEATURE TOGGLE
Cédrick Lunven10 novembre 2015
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
4
Cédrick Lunven
https://github.com/clun
https://fr.linkedin.com/in/clunven
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
@clunven
Release FF4JVersion 1.0.0
INTRODUCTION
2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
5
Data
Service
Presentation Feature
FeatureINTRODUCTION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
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
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
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
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
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
Customstrategy
« Predicate = true »
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
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
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
Version N Version N+1
users beta testers
Dedicated infra?Version N+1
F. Toggle
users beta testers
Check Profile
Canary ReleaseCONTINOUS 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
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 DeploymentsCONTINOUS 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
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 LaunchCONTINOUS 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
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
18
Application
Ouverture Des
SOLDES
DDOs
F. Toggle
Application
ARCHITECTURE : : USE CASES
Graceful degradation
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
19
Default resources
Feature Toggle
DegradedBehaviour
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
Default resources
#2 -Toggle“OFF”
F. Toggle
Strategy
#1 - Check :• Availability• Latency,• Response
time, • Errors…
DegradedBehaviour
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
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
22
Business Toggle
OfficeHour
Release Date
Expression
Rules Engine
A/B Testing
BUSINESS RULES
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions unauthorized
« granted »
Customstrategy
« Predicate = true »
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èseUSE CASES
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
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
FF4J (ff4j.org)
Feature Flipping for JavaCreated in 2013Github (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
Maven CentralSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
27
FeatureSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
28
FeatureSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
29
FeatureStore
FF4j
Import/load
Feature Store
Inject/ Init
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
Feature StoreSECTION 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. ToggleService
AdminF. ToggleConsole
App A
F. Toggle Client
App B
F. Toggle Client
App C
F. Toggle Client
31
Feature StoreSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
32
FF4jSECTION 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
PermissionsSECTION 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
Roles
Integration Spring
PermissionsSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
35
Enable ?
« yes »
Feature
OFF ON
« no »
Permissions
unauthorized
« granted »
users ACL
Customstrategy
« Predicate = true »
Flipping StrategySECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
36
Administration ConsoleSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
37Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
?
38
- - -SECTION II : IMPLEMENTATION
39
Toggling through AOPSECTION II : IMPLEMENTATION
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
CachingSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
41
TaglibSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
42
Feature GroupSECTION II : IMPLEMENTATION
43
ff4j
Store
App
REST API
PHPJS
.NET
Devices
SECTION II : IMPLEMENTATION
. . .REST API
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
45
Console standaloneSECTION II : IMPLEMENTATION
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
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
PropertiesSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
49
Property StoreSECTION 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
Property StoreSECTION II : IMPLEMENTATION
Copyright @ 2015 ParisJug. Licence CC - Creative Commons 2.0 France – Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique
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
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
53
Getting StartedSECTION III : Bonus track
https://github.com/clun/ff4j-extra/tree/master/ff4j-samples
54
Getting SupportSECTION III : Bonus track
2
1
55
Roadmap
CassandraElasticSearch
Eureka
CouchDB
Consul ZooKeeper
NoSQL
ServiceRegistry
…
…
Spring-Data
HazelCastCache Aerospike HBase …
Permissions Shiro OAuth2
NPM Install
JAAS
JCache
JPAFeatureStore / PropertiesStore
Others
SECTION III : Bonus track
Archaius
56
Pourquoi pas vous ?SECTION III : Bonus track
57
Test, comment, react, Tweet..
Thank You !
58
Sponsors
5801/05/2023
59
FF4j vs Togglz (1)APPENDICES
60
TogglzINTRODUCTION
FF4JFF4J
FEATURE FLIPPING FOR JAVA
Storage
FeatureAOP
FlippingCustomRules Audit REST
API Caching
ToggleGroups
RolesACL
ImportExport Taglib Custom
Properties
Consoles
RDBMS Mongo Redis httpClient
InMemory
Servlet J2EFullStack JMX SSH
FF4J
FF4J