@fXzo @antoined#Reactive
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éac...
@fXzo @antoined#Reactive
Qu’est ce qu’un système réactif ?
Un système qui répond à des
variations importantes de
paramètre...
@fXzo @antoined#Reactive
Etre réactif au niveau business
Découverte Validation
Business Model
Hypothèse, mesure
décision
R...
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
Measure faster
Funnel analysis
Cohort analysis
Net promoter score
Search engine marketing
Predict...
@fXzo @antoined#Reactive
Etre réactif pour mesurer
Asynchrones
Non bloquantes
Systématiques
Au fil de l’eau
Cas nominaux e...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Cas d’utilisation
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Le serveur reçoit une requête :
Pour construire la réponse, il faut...
@fXzo @antoined#Reactive
{user: …,
transactions: […]}
{user: …,
transactions: […]}
Réagir de façon non bloquante
getUser
g...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Les tâches sont parallélisables
Une partie du temps côté serveur es...
@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 ser...
@fXzo @antoined#Reactive
{user: …,
transactions: […]}
{user: …,
transactions: […]}
Réagir de façon non bloquante
getTransa...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Traitements en parallèle
Plus de thread bloqué : le serveur réagit
...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Exemple en Scala
Scala 2.10
Future/Promise
@fXzo @antoined#Reactive
Réagir de façon non bloquante
• Types natifs du langage : Future[T] représente un traitement asyn...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
@fXzo @antoined#Reactive
Réagir de façon non bloquante
•2 états : « complété » et « non complété »
•Permet de :
• Définir ...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Une Future peut avoir plusieurs callbacks
Mais ne peut être complét...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Exemple en
JavaScript
API JQuery
Deferred
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
Réagir de façon non bloquante
L’objet Promise est utilisé pour construire
une Future
Il permet de...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
Comment gérer les erreurs dans un contexte asynchrone ?
• Une Futur...
@fXzo @antoined#Reactive
Scala : Future
API
Scala : Future
API
JavaScript :
JQuery
JavaScript :
JQuery
@fXzo @antoined#Reactive
Réagir de façon non bloquante
• En Scala, map , flatMap, … ne vont s’exécuter que pour les cas de...
@fXzo @antoined#Reactive
Réagir de façon non bloquante
@fXzo @antoined#Reactive
Pourquoi être réactif à l’ère de
l’économie digitale ?
@fXzo @antoined#Reactive
Les 4 piliers de la transformation
digitale
MobileMobile SocialSocial
Big DataBig Data CloudCloud...
@fXzo @antoined#Reactive
Qu’est ce qu’une application
réactive ?
Une application qui répond à des
variations importantes d...
@fXzo @antoined#Reactive
Caractéristiques d’une appli
réactive
ParalléliserParalléliser
Limiter et ne pas
bloquer les IO
L...
@fXzo @antoined#Reactive
Un exemple: Code Story 2013
Calcul d’un planning de voyage optimal pour 50.000 trajet (4Mo de JSO...
@fXzo @antoined#Reactive
Un exemple: Code Story 2013
Version réactive
TR1 TR2 TR50000…
ServeurServeur
SortedSetSortedSet
O...
@fXzo @antoined#Reactive
Le code réactif
@fXzo @antoined#Reactive
Réagir aux événements
@fXzo @antoined#Reactive
Réagir aux événements
• Producteurs / consommateurs d’événements
• Faible couplage entre les comp...
@fXzo @antoined#Reactive
Réagir aux événements
Cas d’utilisation
@fXzo @antoined#Reactive
Réagir aux événements
Une application souhaite logger toutes
les actions effectuées par les
utili...
@fXzo @antoined#Reactive
Réagir aux événements
Exemple en
JavaScript
bacon.js
@fXzo @antoined#Reactive
Réagir aux événements
bacon.js est une librairie :
• Pour produire et travailler avec des flux d’...
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
@fXzo @antoined#Reactive
Réagir aux événements
map(...)map(...) onValue(...)onValue(...)merge(...)merge(...)
keyupkeyup
un...
@fXzo @antoined#Reactive
Réagir aux événements
Flux à partir d’événements « externes » :
• Du navigateur : click, keyup, u...
@fXzo @antoined#Reactive
Conclusion
@fXzo @antoined#Reactive
Quelques librairies Reactives
RxJava
@fXzo @antoined#Reactive
Questions ?
Prochain SlideShare
Chargement dans…5
×

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

1 993 vues

Publié le

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.

Publié dans : Logiciels
1 commentaire
1 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
1 993
Sur SlideShare
0
Issues des intégrations
0
Intégrations
456
Actions
Partages
0
Téléchargements
19
Commentaires
1
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. @fXzo @antoined#Reactive Les Applications Réactives: un nouveau paradigme pour relever les défis de l’économie numérique ! http://www.intech.lu
  2. 2. @fXzo @antoined#Reactive ou Comment expliquer à son patron qu’il serait utile de développer en utilisant les patterns réactifs !
  3. 3. @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.
  4. 4. @fXzo @antoined#Reactive Etre réactif au niveau business Découverte Validation Business Model Hypothèse, mesure décision Réaction
  5. 5. @fXzo @antoined#Reactive
  6. 6. @fXzo @antoined#Reactive Measure faster Funnel analysis Cohort analysis Net promoter score Search engine marketing Predictive monitoring Lean startup est réactif Build Faster Unit Tests Usability Tests Continuous Integration Incremental Deployment Free & Open Source Cluster immune System Just in Time Scalability Refactoring Developer Sandbox Minimum Viable Product Learn faster Split tests Customer development Five Why’s Customer Advisory Board Falsifiable hypotheses Product owner Accountability Customer archetypes Cross-functional teams Smoke tests Ideas Measure Learn AppsData Measure faster Split tests Continuous deployment Usability tests Real-time monitoring & alerting Customer liaison Build
  7. 7. @fXzo @antoined#Reactive Etre réactif pour mesurer Asynchrones Non bloquantes Systématiques Au fil de l’eau Cas nominaux et cas d’erreur Les mesures doivent être :
  8. 8. @fXzo @antoined#Reactive Réagir de façon non bloquante
  9. 9. @fXzo @antoined#Reactive Réagir de façon non bloquante Cas d’utilisation
  10. 10. @fXzo @antoined#Reactive Réagir de façon non bloquante Le serveur reçoit une requête : Pour construire la réponse, il faut : rechercher l’utilisateur dans la base de données récupérer les transactions via un service web construire un objet JSON de retour GET /user/1234GET /user/1234
  11. 11. @fXzo @antoined#Reactive {user: …, transactions: […]} {user: …, transactions: […]} Réagir de façon non bloquante getUser getTransactions GET /user/1234GET /user/1234
  12. 12. @fXzo @antoined#Reactive Réagir de façon non bloquante Les tâches sont parallélisables Une partie du temps côté serveur est perdu à attendre des données ProblèmesProblèmes
  13. 13. @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
  14. 14. @fXzo @antoined#Reactive {user: …, transactions: […]} {user: …, transactions: […]} Réagir de façon non bloquante getTransactions GET /user/1234GET /user/1234 getUser
  15. 15. @fXzo @antoined#Reactive Réagir de façon non bloquante Traitements en parallèle Plus de thread bloqué : le serveur réagit aux évènements qui surviennent AvantagesAvantages
  16. 16. @fXzo @antoined#Reactive Réagir de façon non bloquante Exemple en Scala Scala 2.10 Future/Promise
  17. 17. @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 »
  18. 18. @fXzo @antoined#Reactive Réagir de façon non bloquante
  19. 19. @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
  20. 20. @fXzo @antoined#Reactive Réagir de façon non bloquante Une Future peut avoir plusieurs callbacks Mais 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 !
  21. 21. @fXzo @antoined#Reactive Réagir de façon non bloquante Exemple en JavaScript API JQuery Deferred
  22. 22. @fXzo @antoined#Reactive
  23. 23. @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
  24. 24. @fXzo @antoined#Reactive Réagir de façon non bloquante Comment 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
  25. 25. @fXzo @antoined#Reactive Scala : Future API Scala : Future API JavaScript : JQuery JavaScript : JQuery
  26. 26. @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
  27. 27. @fXzo @antoined#Reactive Réagir de façon non bloquante
  28. 28. @fXzo @antoined#Reactive Pourquoi être réactif à l’ère de l’économie digitale ?
  29. 29. @fXzo @antoined#Reactive Les 4 piliers de la transformation digitale MobileMobile SocialSocial Big DataBig Data CloudCloud Temps Réel
  30. 30. @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.
  31. 31. @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
  32. 32. @fXzo @antoined#Reactive Un exemple: Code Story 2013 Calcul 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
  33. 33. @fXzo @antoined#Reactive Un exemple: Code Story 2013 Version réactive TR1 TR2 TR50000… ServeurServeur SortedSetSortedSet OptimisationOptimisation TR91 TR34 TR21… TR34 HTTP IterateeIteratee TR1 TR2 TR50000
  34. 34. @fXzo @antoined#Reactive Le code réactif
  35. 35. @fXzo @antoined#Reactive Réagir aux événements
  36. 36. @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
  37. 37. @fXzo @antoined#Reactive Réagir aux événements Cas d’utilisation
  38. 38. @fXzo @antoined#Reactive Réagir aux événements Une 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
  39. 39. @fXzo @antoined#Reactive Réagir aux événements Exemple en JavaScript bacon.js
  40. 40. @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
  41. 41. @fXzo @antoined#Reactive
  42. 42. @fXzo @antoined#Reactive
  43. 43. @fXzo @antoined#Reactive
  44. 44. @fXzo @antoined#Reactive Réagir aux événements map(...)map(...) onValue(...)onValue(...)merge(...)merge(...) keyupkeyup unloadunload clickclick {type: …}{type: …}
  45. 45. @fXzo @antoined#Reactive Réagir aux événements Flux à 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 »
  46. 46. @fXzo @antoined#Reactive Conclusion
  47. 47. @fXzo @antoined#Reactive Quelques librairies Reactives RxJava
  48. 48. @fXzo @antoined#Reactive Questions ?

×