SlideShare une entreprise Scribd logo
1  sur  31
Programmation réactive
avec Spring 5 et Reactor
Florian Beaufumé
11/2017
Florian Beaufumé
• Architecte logiciel
• Expert Java
• Freelance
• @fbeaufume
• www.adeliosys.fr
• www.slideshare.net/fbeaufume/presentations
• www.brownbaglunch.fr/baggers.html#florian-beaufume
• Montée en charge
• C10K (= 10K connexions)
• Comment supporter
10000 connexions simultanées ?
• Robustesse
• Que faire si la base ou les systèmes tiers
sont (très) lents ?
Objectifs
Server
DB
• Modèle standard de nos serveurs
• Est bloquant avec pool de thread :
• En charge :
• Multiplier les serveurs ?
• Multiplier les threads ?
Modèle « thread-per-request »
Server
Requests Threads pool
• Cout mémoire et CPU (context switches)
• Contention
Limitations des threads
Server thread DatabaseClient
HTTP request
SQL request #1
SQL request #2
• Montée en charge et robustesse
• Exemples : Node.js, Vert.x, Redis, HAProxy
Modèle non bloquant
Event queueEvents
Event loop
HTTP requests
SQL responses
…
Few worker threads
Callback hell
Exemple Spring 5
Types réactifs
Eléments Bloquant Réactif
0..N Collection<Book> Flux<Book>
0..1 Book Mono<Book>
0 void Mono<Void>
WebClient
Spring Framework 5
Spring Framework
Tomcat Netty
Reactor
Spring Web MVC Spring WebFlux
Bloquant Réactif
Reactive
Streams
Ecosystème Spring réactif
Spring Framework 5
Spring Boot 2
Spring Data 2
Spring Security 5
Spring Integration 5
Spring Cloud
Spring Data 2
• "Programming with asynchronous data streams"
• Basé sur des étapes asynchrones et non bloquantes
• API orientées callback et/ou déclaratives par composition de fonctions
• Programmation réactive ≈ streams + CompletableFuture + backpressure
• Bénéfices :
• Montée en charge
• Robustesse
Programmation réactive
• Code
• Logs
Reactor
Construction
Opérateurs
Marble diagrams
• Pour donner du contrôle au consommateur sur le producteur
Backpressure
Producer Consumer
Data flow
Data request
Conversions
• Cas simple
• Manipulation de l’échelle de temps
Tests avec reactor-test
• "Standard for asynchronous stream processing with non-blocking
backpressure"
• Implémentations : RxJava, Reactor, Akka Streams, etc.
Reactive streams
Comparaison de performance
VS
Bloquant
Réactif
Scénario
Time
Concurrent
users
2 min10 sec
http://localhost:8080/pause/1000
Charge
Bloquant Réactif
300 users injectés => 189 req/s mesuré 3000 users injectés => 2664 req/s mesuré
Temps de réponse
Bloquant Réactif
Moyenne=1462, médiane=1579, σ=297 Moyenne=1036, médiane=1013, σ=59
Threads
Bloquant Réactif
• Syntaxe déroutante
• Commencer par les streams Java 8 et la programmation fonctionnelle
• API contaminante
• Plus facile pour de nouvelles applications ou microservices
Difficultés
• JDBC pas encore supporté
• Mono.fromCallable(() -> { … }).subscribeOn(Schedulers.elastic())
• Attendre JDK 10
• ThreadLocal perdent leur intérêt (MDC logging par exemple)
• Pas encore de scope request ou session
• myFlux.subscriberContext(Context.of("key", "value"))…
Limitations
• Supporter une forte charge
• Pour fiabiliser des applications très communicantes
• Microservices
• Applications sensibles à la contention
Cas d’usages
@fbeaufume
www.adeliosys.fr
fr.slideshare.net/fbeaufume
Merci

Contenu connexe

Tendances

Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)ENSET, Université Hassan II Casablanca
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesLilia Sfaxi
 
Chp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOAChp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOALilia Sfaxi
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratiqueAbdelouahed Abdou
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRSLilia Sfaxi
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockageLilia Sfaxi
 
les style d'architecture
les style d'architecture les style d'architecture
les style d'architecture Mouna Maazoun
 

Tendances (20)

Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées Services
 
Chp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOAChp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOA
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Spring Boot RestApi.pptx
Spring Boot RestApi.pptxSpring Boot RestApi.pptx
Spring Boot RestApi.pptx
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
 
Angular
AngularAngular
Angular
 
les style d'architecture
les style d'architecture les style d'architecture
les style d'architecture
 

Similaire à Programmation réactive avec Spring 5 et Reactor

Programmation concurrente en Java
Programmation concurrente en JavaProgrammation concurrente en Java
Programmation concurrente en JavaFlorian Beaufumé
 
Meetup React Nantes - React Query.pdf
Meetup React Nantes - React Query.pdfMeetup React Nantes - React Query.pdf
Meetup React Nantes - React Query.pdfOlivierThierry9
 
Camping des Speakers - React Query.pdf
Camping des Speakers - React Query.pdfCamping des Speakers - React Query.pdf
Camping des Speakers - React Query.pdfOlivierThierry9
 
JUG Summercamp - Le server state facile avec TanStack Query.pdf
JUG Summercamp - Le server state facile avec TanStack Query.pdfJUG Summercamp - Le server state facile avec TanStack Query.pdf
JUG Summercamp - Le server state facile avec TanStack Query.pdfOlivierThierry9
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysVictor Coustenoble
 
Alphorm.com Formation Microsoft Hyperconvergence
Alphorm.com Formation Microsoft HyperconvergenceAlphorm.com Formation Microsoft Hyperconvergence
Alphorm.com Formation Microsoft HyperconvergenceAlphorm
 
Monter en charge, tester et surveiller avec une application Windows Azure : l...
Monter en charge, tester et surveiller avec une application Windows Azure : l...Monter en charge, tester et surveiller avec une application Windows Azure : l...
Monter en charge, tester et surveiller avec une application Windows Azure : l...Microsoft Technet France
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx FranceMarc Bojoly
 
Performance ug#1
Performance ug#1Performance ug#1
Performance ug#1Marc Bojoly
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéChristophe Laporte
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Cellenza
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Microsoft
 
Architectures microservices
Architectures microservicesArchitectures microservices
Architectures microservicesRiadh MNASRI
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Chapitre-3-Architectures-Haute-Performance-et-embarquées.pdf
Chapitre-3-Architectures-Haute-Performance-et-embarquées.pdfChapitre-3-Architectures-Haute-Performance-et-embarquées.pdf
Chapitre-3-Architectures-Haute-Performance-et-embarquées.pdfSoumayaMabrouk2
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 

Similaire à Programmation réactive avec Spring 5 et Reactor (20)

Programmation concurrente en Java
Programmation concurrente en JavaProgrammation concurrente en Java
Programmation concurrente en Java
 
Meetup React Nantes - React Query.pdf
Meetup React Nantes - React Query.pdfMeetup React Nantes - React Query.pdf
Meetup React Nantes - React Query.pdf
 
Camping des Speakers - React Query.pdf
Camping des Speakers - React Query.pdfCamping des Speakers - React Query.pdf
Camping des Speakers - React Query.pdf
 
JUG Summercamp - Le server state facile avec TanStack Query.pdf
JUG Summercamp - Le server state facile avec TanStack Query.pdfJUG Summercamp - Le server state facile avec TanStack Query.pdf
JUG Summercamp - Le server state facile avec TanStack Query.pdf
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft Techdays
 
Alphorm.com Formation Microsoft Hyperconvergence
Alphorm.com Formation Microsoft HyperconvergenceAlphorm.com Formation Microsoft Hyperconvergence
Alphorm.com Formation Microsoft Hyperconvergence
 
Monter en charge, tester et surveiller avec une application Windows Azure : l...
Monter en charge, tester et surveiller avec une application Windows Azure : l...Monter en charge, tester et surveiller avec une application Windows Azure : l...
Monter en charge, tester et surveiller avec une application Windows Azure : l...
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
 
Performance ug#1
Performance ug#1Performance ug#1
Performance ug#1
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilité
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1
 
Perf university
Perf universityPerf university
Perf university
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1
 
Architectures microservices
Architectures microservicesArchitectures microservices
Architectures microservices
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
WebSocket avec Java EE 7
WebSocket avec Java EE 7WebSocket avec Java EE 7
WebSocket avec Java EE 7
 
Chapitre-3-Architectures-Haute-Performance-et-embarquées.pdf
Chapitre-3-Architectures-Haute-Performance-et-embarquées.pdfChapitre-3-Architectures-Haute-Performance-et-embarquées.pdf
Chapitre-3-Architectures-Haute-Performance-et-embarquées.pdf
 
Formation Google App Engine
Formation Google App EngineFormation Google App Engine
Formation Google App Engine
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 

Programmation réactive avec Spring 5 et Reactor