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

1,991 views

Published on

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.

Published in: Software
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
1,991
On SlideShare
0
From Embeds
0
Number of Embeds
456
Actions
Shares
0
Downloads
19
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

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 ?

×