48
@fXzo @antoined #Reactive Les Applications Réactives: un nouveau paradigme pour relever les défis de l’économie numérique ! http://www.intech.lu

Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

Embed Size (px)

DESCRIPTION

A quels enjeux est confrontée une entreprise qui souhaite développer sa stratégie digitale ? Pourquoi les paradigmes de développement classiques ne sont pas adaptés pour développer les applications du futur ? Nous montrerons tout d'abord pourquoi au delà du buzz marketing, les Applications Réactives apportent une réponse aux défis que doivent relever les organisations. Nous décrirons ensuite les principes réactifs et en illustrerons la mise en oeuvre avec la Plate-forme Play/Akka en Scala.

Citation preview

Page 1: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Les Applications Réactives: un nouveau paradigme pour relever les défis de l’économie numérique !

http://www.intech.lu

Page 2: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

ou

Comment expliquer à son patron qu’il serait utile de développer en utilisant

les patterns réactifs !

Page 3: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Qu’est ce qu’un système réactif ?

Un système qui répond à des variations importantes de

paramètres prédéfinis sans remettre en cause sa structure et

sans perturber son fonctionnement nominal.

Page 4: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Etre réactif au niveau business

Découverte Validation

Business ModelHypothèse, mesure

décision

Réaction

Page 5: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Page 6: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Measure faster

Funnel analysisCohort analysisNet promoter scoreSearch engine marketingPredictive monitoring

Lean startup est réactifBuild FasterUnit TestsUsability TestsContinuous IntegrationIncremental DeploymentFree & Open SourceCluster immune SystemJust in Time ScalabilityRefactoringDeveloper SandboxMinimum Viable Product

Learn fasterSplit tests

Customer developmentFive Why’s

Customer Advisory Board

Falsifiable hypothesesProduct ownerAccountability

Customer archetypesCross-functional teams

Smoke tests

Ideas

Measure

Learn

AppsData

Measure fasterSplit tests

Continuous deploymentUsability tests

Real-time monitoring & alertingCustomer liaison

Build

Page 7: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Etre réactif pour mesurer

Asynchrones

Non bloquantes

SystématiquesAu fil de l’eau

Cas nominaux et cas d’erreur

Les mesures doivent être :

Page 8: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Page 9: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Cas d’utilisation

Page 10: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquanteLe serveur reçoit une requête :

Pour construire la réponse, il faut :rechercher l’utilisateur dans la base

de donnéesrécupérer les transactions via un

service webconstruire un objet JSON de retour

GET /user/1234GET /user/1234

Page 11: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

{user: …,

transactions: […]}

{user: …,

transactions: […]}

Réagir de façon non bloquante

getUser

getTransactions

GET /user/1234GET /user/1234

Page 12: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Les tâches sont parallélisablesUne partie du temps côté serveur est

perdu à attendre desdonnées

ProblèmesProblèmes

Page 13: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

• Lance en parallèle les requêtes vers la base de données et le service web

• Définit une fonction qui sera exécutée quand les données seront disponibles

• Une fois les données disponibles, construit la réponse et l’envoie au client

Modèle non-bloquant

Page 14: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

{user: …,

transactions: […]}

{user: …,

transactions: […]}

Réagir de façon non bloquante

getTransactions

GET /user/1234GET /user/1234

getUser

Page 15: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Traitements en parallèlePlus de thread bloqué : le serveur réagit

aux évènementsqui surviennent

AvantagesAvantages

Page 16: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Exemple en ScalaScala 2.10

Future/Promise

Page 17: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

• Types natifs du langage : Future[T] représente un traitement asynchrone qui peut éventuellement retourner une instance de T

• Parallélisable : possibilité d’exécuter une liste de Future et d’enregistrer un callback une fois tous les traitements terminés

• Composable : enchaînement de Future : « exécute X et ensuite exécute Y »

Page 18: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Page 19: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

•2 états : « complété » et « non complété »

•Permet de :

• Définir des fonctions (« callbacks ») qui seront exécutées lorsque la Future sera complétée (onSuccess, …)

• D’appliquer une fonction sur la donnée quand la Future sera complétée (map)

• De composer (enchaîner) les Futures (flatMap) pour en obtenir une nouvelle

Page 20: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Une Future peut avoir plusieurs callbacksMais ne peut être complétée qu’une seule fois

Le type Future est utilisé en « lecture » (récupérer sa valeur)Alors comment compléter une Future ?

Utilisation du type Promise !Alors comment compléter une Future ?

Utilisation du type Promise !

Page 21: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Exemple en JavaScriptAPI JQuery

Deferred

Page 22: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Page 23: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

L’objet Promise est utilisé pour construire une Future

Il permet de compléter cette Future « plus tard »… mais une seule fois !Une Future est en « lecture seule »

Promise permet d’écrire une valeur dans une Future

Une Future est en « lecture seule »Promise permet d’écrire une valeur

dans une Future

Page 24: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquanteComment gérer les erreurs dans un contexte asynchrone ?

• Une Future complétée peut avoir deux états : Success ou Failure

• Des callbacks dédiés pour ces différents résultats :

onSuccess / onFailure

Page 25: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Scala : Future APIScala : Future API

JavaScript : JQuery

JavaScript : JQuery

Page 26: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

• En Scala, map , flatMap, … ne vont s’exécuter que pour les cas de succès

• Il est possible de « récupérer » d’une Future en erreur, via les méthodes recover, recoverWith

Page 27: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir de façon non bloquante

Page 28: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Pourquoi être réactif à l’ère de l’économie digitale ?

Page 29: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Les 4 piliers de la transformation digitaleMobileMobile SocialSocial

Big DataBig Data CloudCloud

TempsRéel

Page 30: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Qu’est ce qu’une application réactive ?

Une application qui répond à des variations importantes du nombre de connexions simultanées sans remettre en cause sa structure et sans perturber son fonctionnement nominal.

Page 31: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Caractéristiques d’une appli réactive

ParalléliserParalléliser Limiter et ne pas bloquer les IO

Limiter et ne pas bloquer les IO

Gérer les erreurs comme les cas

nominaux

Gérer les erreurs comme les cas

nominaux

Nombre de connexions simultanées

Nombre de connexions simultanées

Comment ?

Orientée évènements

Scalable Résiliente Prédictible

Page 32: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Un exemple: Code Story 2013Calcul d’un planning de voyage optimal pour 50.000 trajet (4Mo de JSON) en moins de 30s de temps vu de l’utilisateur.

TR1 TR2 TR50000…

ServeurServeur

TR1 TR2 TR50000…

HTTP

SortedSetSortedSet

OptimisationOptimisation

TR91 TR34 TR21…

TR1 TR2 TR50000

TR34

Page 33: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Un exemple: Code Story 2013Version réactive

TR1 TR2 TR50000…

ServeurServeur

SortedSetSortedSet

OptimisationOptimisation

TR91 TR34 TR21…

TR34

HTTP

IterateeIteratee

TR1 TR2 TR50000

Page 34: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Le code réactif

Page 35: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir aux événements

Page 36: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir aux événements• Producteurs / consommateurs d’événements

• Faible couplage entre les composants• Meilleure utilisation des ressources

• Travailler avec des flux d’événements, potentiellement infinis• Par exemple : événements de géolocalisation, flux de transactions, …• Besoin de filtrer les événements, les modifier, agréger différents flux

Page 37: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir aux événements

Cas d’utilisation

Page 38: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir aux événementsUne application souhaite logger toutes les actions effectuées par les utilisateurs

Doit être fait de façon non intrusive (pas de dégradation des performances du service)

Différentes sources et types d’événements

Page 39: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir aux événements

Exemple en JavaScriptbacon.js

Page 40: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir aux événements

bacon.js est une librairie :

• Pour produire et travailler avec des flux d’événements en JavaScript

• Qui offre un pattern de type « Observable »

• Permettant également d’utiliser des patterns de la programmation fonctionnelle

Page 41: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Page 42: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Page 43: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Page 44: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir aux événements

map(...)map(...) onValue(...)onValue(...)merge(...)merge(...)

keyupkeyup

unloadunload

clickclick

{type: …}{type: …}

Page 45: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Réagir aux événementsFlux à partir d’événements « externes » :

• Du navigateur : click, keyup, unload• Résultats d’appels asynchrones (AJAX)

Ou événements créés avec bacon :• Fonctionnement en mode « push »

Page 46: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Conclusion

Page 47: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Quelques librairies Reactives

RxJava

Page 48: Les applications réactives, un nouveau paradigme pour relever les défis de l'économie numérique

@fXzo @antoined#Reactive

Questions ?