SlideShare ist ein Scribd-Unternehmen logo
1 von 44
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)

Weitere ähnliche Inhalte

Ähnlich wie Riviera JUG ff4j

Publier une application mobile en un clic
Publier une application mobile en un clicPublier une application mobile en un clic
Publier une application mobile en un clicFabernovel
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsNicolas Mussat
 
Paris Meetup Jhispter #9 - Generator FF4j for Jhipster
Paris Meetup Jhispter #9 - Generator FF4j for JhipsterParis Meetup Jhispter #9 - Generator FF4j for Jhipster
Paris Meetup Jhispter #9 - Generator FF4j for JhipsterCédrick Lunven
 
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingThe Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingFrançois Le Droff
 
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Association Agile Nantes
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipseISIG
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileMicrosoft
 
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobile
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobileMicrosoft experiences'16 - Tester, Monitorer et Déployer son application mobile
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobileAdrien Siffermann
 
Hibernate JPA : télécharger et configurer
Hibernate JPA : télécharger et configurerHibernate JPA : télécharger et configurer
Hibernate JPA : télécharger et configurerProfLibre
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
Hibernate : vue d’ensemble
Hibernate : vue d’ensembleHibernate : vue d’ensemble
Hibernate : vue d’ensembleProfLibre
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureMarc Nazarian
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureJonathan Bonzy
 

Ähnlich wie Riviera JUG ff4j (20)

Publier une application mobile en un clic
Publier une application mobile en un clicPublier une application mobile en un clic
Publier une application mobile en un clic
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
 
Paris Meetup Jhispter #9 - Generator FF4j for Jhipster
Paris Meetup Jhispter #9 - Generator FF4j for JhipsterParis Meetup Jhispter #9 - Generator FF4j for Jhipster
Paris Meetup Jhispter #9 - Generator FF4j for Jhipster
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
 
Push notification
Push notificationPush notification
Push notification
 
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingThe Spring of Adobe Flex Remoting
The Spring of Adobe Flex Remoting
 
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
 
Tests Interfaces Web avec Rails
Tests Interfaces Web avec RailsTests Interfaces Web avec Rails
Tests Interfaces Web avec Rails
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
Usine logicielle ios
Usine logicielle iosUsine logicielle ios
Usine logicielle ios
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobile
 
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobile
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobileMicrosoft experiences'16 - Tester, Monitorer et Déployer son application mobile
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobile
 
Hibernate JPA : télécharger et configurer
Hibernate JPA : télécharger et configurerHibernate JPA : télécharger et configurer
Hibernate JPA : télécharger et configurer
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
Hibernate : vue d’ensemble
Hibernate : vue d’ensembleHibernate : vue d’ensemble
Hibernate : vue d’ensemble
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Silverlight 4
Silverlight 4Silverlight 4
Silverlight 4
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 

Mehr von Cédrick Lunven

Top 10 present and future innovations in the NoSQL Cassandra ecosystem (2022)
Top 10 present and future innovations in the NoSQL Cassandra ecosystem (2022)Top 10 present and future innovations in the NoSQL Cassandra ecosystem (2022)
Top 10 present and future innovations in the NoSQL Cassandra ecosystem (2022)Cédrick Lunven
 
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...Cédrick Lunven
 
Avoiding Pitfalls for Cassandra.pdf
Avoiding Pitfalls for Cassandra.pdfAvoiding Pitfalls for Cassandra.pdf
Avoiding Pitfalls for Cassandra.pdfCédrick Lunven
 
Unlock cassandra data for application developers using graphQL
Unlock cassandra data for application developers using graphQLUnlock cassandra data for application developers using graphQL
Unlock cassandra data for application developers using graphQLCédrick Lunven
 
An oss api layer for your cassandra
An oss api layer for your cassandraAn oss api layer for your cassandra
An oss api layer for your cassandraCédrick Lunven
 
CN Asturias - Stateful application for kubernetes
CN Asturias -  Stateful application for kubernetes CN Asturias -  Stateful application for kubernetes
CN Asturias - Stateful application for kubernetes Cédrick Lunven
 
Xebicon2019 m icroservices
Xebicon2019   m icroservicesXebicon2019   m icroservices
Xebicon2019 m icroservicesCédrick Lunven
 
Reactive Programming with Cassandra
Reactive Programming with CassandraReactive Programming with Cassandra
Reactive Programming with CassandraCédrick Lunven
 
VoxxedDays Luxembourg FF4J
VoxxedDays Luxembourg FF4JVoxxedDays Luxembourg FF4J
VoxxedDays Luxembourg FF4JCédrick Lunven
 
VoxxedDays Luxembourg 2019
VoxxedDays Luxembourg 2019VoxxedDays Luxembourg 2019
VoxxedDays Luxembourg 2019Cédrick Lunven
 
Create API for your Databases
Create API for your DatabasesCreate API for your Databases
Create API for your DatabasesCédrick Lunven
 
Leveraging Feature Toggles for your Microservices (VoxxeddaysMicroservices Pa...
Leveraging Feature Toggles for your Microservices (VoxxeddaysMicroservices Pa...Leveraging Feature Toggles for your Microservices (VoxxeddaysMicroservices Pa...
Leveraging Feature Toggles for your Microservices (VoxxeddaysMicroservices Pa...Cédrick Lunven
 
Streaming, Analytics and Reactive Applications with Apache Cassandra
Streaming, Analytics and Reactive Applications with Apache CassandraStreaming, Analytics and Reactive Applications with Apache Cassandra
Streaming, Analytics and Reactive Applications with Apache CassandraCédrick Lunven
 
Riviera jug apicassandra
Riviera jug apicassandraRiviera jug apicassandra
Riviera jug apicassandraCédrick Lunven
 

Mehr von Cédrick Lunven (17)

Top 10 present and future innovations in the NoSQL Cassandra ecosystem (2022)
Top 10 present and future innovations in the NoSQL Cassandra ecosystem (2022)Top 10 present and future innovations in the NoSQL Cassandra ecosystem (2022)
Top 10 present and future innovations in the NoSQL Cassandra ecosystem (2022)
 
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
 
Avoiding Pitfalls for Cassandra.pdf
Avoiding Pitfalls for Cassandra.pdfAvoiding Pitfalls for Cassandra.pdf
Avoiding Pitfalls for Cassandra.pdf
 
Unlock cassandra data for application developers using graphQL
Unlock cassandra data for application developers using graphQLUnlock cassandra data for application developers using graphQL
Unlock cassandra data for application developers using graphQL
 
An oss api layer for your cassandra
An oss api layer for your cassandraAn oss api layer for your cassandra
An oss api layer for your cassandra
 
CN Asturias - Stateful application for kubernetes
CN Asturias -  Stateful application for kubernetes CN Asturias -  Stateful application for kubernetes
CN Asturias - Stateful application for kubernetes
 
Xebicon2019 m icroservices
Xebicon2019   m icroservicesXebicon2019   m icroservices
Xebicon2019 m icroservices
 
DevFestBdm2019
DevFestBdm2019DevFestBdm2019
DevFestBdm2019
 
Reactive Programming with Cassandra
Reactive Programming with CassandraReactive Programming with Cassandra
Reactive Programming with Cassandra
 
Shift Dev Conf API
Shift Dev Conf APIShift Dev Conf API
Shift Dev Conf API
 
VoxxedDays Luxembourg FF4J
VoxxedDays Luxembourg FF4JVoxxedDays Luxembourg FF4J
VoxxedDays Luxembourg FF4J
 
VoxxedDays Luxembourg 2019
VoxxedDays Luxembourg 2019VoxxedDays Luxembourg 2019
VoxxedDays Luxembourg 2019
 
Design API - SnowCampIO
Design API - SnowCampIODesign API - SnowCampIO
Design API - SnowCampIO
 
Create API for your Databases
Create API for your DatabasesCreate API for your Databases
Create API for your Databases
 
Leveraging Feature Toggles for your Microservices (VoxxeddaysMicroservices Pa...
Leveraging Feature Toggles for your Microservices (VoxxeddaysMicroservices Pa...Leveraging Feature Toggles for your Microservices (VoxxeddaysMicroservices Pa...
Leveraging Feature Toggles for your Microservices (VoxxeddaysMicroservices Pa...
 
Streaming, Analytics and Reactive Applications with Apache Cassandra
Streaming, Analytics and Reactive Applications with Apache CassandraStreaming, Analytics and Reactive Applications with Apache Cassandra
Streaming, Analytics and Reactive Applications with Apache Cassandra
 
Riviera jug apicassandra
Riviera jug apicassandraRiviera jug apicassandra
Riviera jug apicassandra
 

Riviera JUG ff4j

Hinweis der Redaktion

  1. Traitement, fonction, story, comportement  Qui traverse toutes les couches applicatives
  2. 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
  3. 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 ?
  4. 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é.
  5. AVANT : Il fallait une infrastructure dédiée pour tester les nouveaux services Maintenant une seule infrastructure est suffisante
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. Ce que se traduit par le XML suivant
  12. Ce que se traduit par le XML suivant
  13. 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