Programmation réactive en Java

Ce blogue traite des principes de la programmation réactive pour les développeurs Java afin d’assurer une gestion systématique et évolutive des données conformément aux normes de haut niveau de développement en Java.
5 minutes de lecture
Sandeep Pratap Singh
Sandeep Pratap Singh
Spécialiste technique
5 minutes de lecture

Qu’est-ce que la programmation réactive et en quoi diffère-t-elle de la programmation traditionnelle ?

Dans le domaine en constante évolution de la technologie, les technologies existantes sont rebaptisées tous les dix ans environ, suscitant un nouvel enthousiasme à leur sujet — et la programmation réactive et la programmation par flux n’y font pas exception. Alors que la programmation par flux regroupe quatre pratiques différentes, les questions restent les mêmes : pourquoi la programmation réactive ? Et pourquoi maintenant ?

Le paysage technologique a subi une transformation radicale au cours des 10 à 15 dernières années. Aujourd’hui, une multitude d’appareils — comme les téléphones intelligents, les montres et autres appareils portables, les capteurs et bien d’autres — sont interconnectés de manière transparente à Internet, générant d’immenses quantités de données circulant. Cette montée des données a donné lieu à des défis liés au Big Data, comme la gestion de fréquences et de volumes élevés d’interactions. C’est là que la programmation réactive entre en jeu. Il s’agit d’avoir une architecture qui se concentre sur quatre grands principes : évolutivité, résilience, réactivité et pilotage par événements.

qute-color

La programmation réactive est un modèle de programmation conçu pour le traitement asynchrone, non bloquant et piloté par événements des données. Elle consiste à modéliser les données et les événements comme des flux de données observables, avec des fonctions de traitement des données mises en œuvre pour réagir à tout changement dans ces flux.

 

qute-color

Les développeurs utilisent la programmation réactive en Java pour une gestion efficace et évolutive des données et des événements grâce à du code non bloquant et asynchrone. Consultez notre plus récent article de blogue qui met en lumière l’importance de la programmation réactive dans le développement Java.

Partager  

Supposons un scénario où une tâche englobe plusieurs requêtes. Dans cette méthode de programmation, une requête pour une ressource particulière est initiée au sein de ce flux, tandis que les autres parties du flux se poursuivent simultanément. Lorsque les données de la requête sont disponibles, une notification accompagnée des données sous forme de fonction de rappel est envoyée à l’appelant. Cette fonction de rappel facilite le traitement de la réponse selon les besoins de l’application ou de l’utilisateur.

En programmation réactive, les flux de données constituent la véritable colonne vertébrale de l’application. Les messages, appels, événements et même les défaillances dans les processus sont transportés par un flux de données sous forme de réponse.

Lorsqu’un code est écrit, il faut créer des flux de données pour tout — comme les événements de clic, les messages ingérés, les mesures des capteurs, les notifications de disponibilité, les requêtes HTTP, les changements sur une variable et les événements de cache, afin qu’ils incluent tout type de changement imaginable. Toutefois, cela aura un effet négatif sur l’application, car elle deviendra intrinsèquement asynchrone.

Besoin de « réactivité » en Java

En présence de gros volumes de données, le traitement asynchrone est nécessaire pour un système rapide, réactif et évolutif. Java suit la programmation orientée objet, ce qui rend difficile la mise en œuvre d’un comportement asynchrone et complique le code et sa maintenance. Cela rend la programmation réactive particulièrement bénéfique dans un environnement purement orienté objet, puisqu’elle simplifie les flux de travail asynchrones.

Java, qui à l’origine ne prenait pas en charge les langages à coroutines, n’était pas un langage réactif. Cependant, les langages de la machine virtuelle Java tels que Scala et Clojure prennent en charge les modèles réactifs natifs, ce qui signifie que Java prend en charge la programmation réactive après la version 9. Il s’agit du langage de programmation le plus utilisé en développement d’entreprise et les récentes mises à jour ont ajouté des interfaces pour fournir des couches de flux réactifs au-dessus du JDK standard.

Comment atteindre la réactivité en Java ?

Java 8 a été publié avec la réactivité comme partie intégrante du langage, mais cela n’a pas été bien accueilli par les développeurs. Heureusement, il existe des implémentations tierces disponibles pour la programmation réactive en Java, qui sont régulièrement mises à jour, sauvant ainsi la mise aux développeurs Java.

Reactive Streams est une norme qui fournit un moyen de traiter les flux asynchrones avec contrôle de flux non bloquant (« back pressure »). Java 9 inclut désormais des interfaces de base pour chacun des concepts fondamentaux de flux réactifs dans la bibliothèque Flow Concurrency.

RxJava, initialement utilisé par Netflix, a ensuite été publié sous licence open source. Il s’intègre parfaitement à Java 8 grâce aux lambdas, permettant aux développeurs de créer des programmes asynchrones et pilotés par événements pour Java traditionnel et Java pour Android.

Spring Framework 5.0 intègre des fonctionnalités réactives, accompagné d’outils pour la création de serveurs et clients HTTP. Pour les utilisateurs de Spring dans la couche web, des annotations peuvent être utilisées pour améliorer les méthodes des contrôleurs et gérer les demandes HTTP pour le routage des requêtes réactives et la gestion de la pression sur le framework. Spring s’appuie sur le framework Reactor mais propose aussi des API permettant d’exploiter ses fonctionnalités avec un choix multiple de bibliothèques, comme Reactor ou RxJava. Les utilisateurs peuvent choisir entre Tomcat, Jetty ou Netty via Reactor IO et Undertow pour la pile réseau côté serveur.

Avantages de la programmation réactive

Les avantages de la programmation réactive sont nombreux :

  1. Amélioration de la performance : capacité à traiter d’immenses volumes de données rapidement et de manière constante
  2. Évolutivité : plus facile de travailler en multithread asynchrone et de gérer des threading complexes
  3. Meilleure expérience utilisateur : l’application est plus réactive pour l’utilisateur
  4. Mises à jour simplifiées : le code est plus facile à lire et il est plus prévisible d’y apporter des changements

Désavantages

  1. Utilise plus de mémoire pour stocker des flux de données la plupart du temps (puisque basé sur des flux au fil du temps)
  2. Peut sembler peu conventionnel à apprendre au début (tout se présente sous forme de flux)
  3. Il est aussi compliqué d’écrire des tests unitaires pour ce type de code asynchrone
  4. Le débogage du code est encore plus difficile

Applications concrètes

La programmation réactive en Java constitue une solution élégante pour les applications à forte charge ou multi-utilisateurs, comme ci-dessous.

  1. Diffusion de données en temps réel
  2. Intelligence artificielle et apprentissage automatique
  3. Serveurs proxy, équilibreurs de charge
  4. Code serveur servant une expérience utilisateur hautement interactive et réactive
  5. Applications audio et vidéo
  6. Réseaux sociaux, messagerie et jeux

Références

https://dzone.com/

https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape

https://stackoverflow.com/

https://en.wikipedia.org/wiki/Reactive_Streams

Etiquettes
Partager sur
ERS Ingénierie numérique Blogues Programmation réactive en Java