web-dev-qa-db-fra.com

Comparaison de Java frameworks réactifs

Je vois de nombreux frameworks/bibliothèques qui prétendent qu'ils peuvent aider à créer des applications réactives en Java, telles que: Akka, Vert.x, RxJava, Reactor, QBit, etc.

Ils semblent avoir différentes approches, fonctionnalités, avantages, inconvénients, etc. Je n'ai pas pu trouver de comparaisons détaillées. Il existe une documentation sur chacun de ces encadrements, mais il ne me suffit pas de comprendre les différences.

Quelles sont les différences entre les principaux frameworks réactifs Java?

Et quelles sont les exigences de l'application qui peuvent conduire au choix d'un cadre réactif Java?

Merci pour votre temps.

28
Florian Beaufumé

Je travaille sur RxJava et j'ai fait quelques évaluations sur Akka-Streams et Reactor récemment.

Autant que je sache avec toutes les bibliothèques, elles convergent vers un concept unique appelé Reactive-Streams afin que vous puissiez aller et venir entre les implémentations.

Je crois que RxJava est le plus générique de tous, n'a aucune dépendance sur les autres bibliothèques et n'est pas d'opinion sur la concurrence. Il est très populaire sur Android principalement en raison de la prise en charge par d'autres bibliothèques/frameworks tels que Retrofit. La branche 1.x n'implémente pas Reactive-Streams mais a des wrappers pour cela tandis que 2.x est compatible nativement Reactive-Streams (actuellement disponible en avant-première) De nombreux langages de programmation JVM populaires ont des adaptateurs pour cela (Scala, Kotlin, Clojure, etc.).

Reactor est compatible avec Reactive-Streams car il s'agit d'une bibliothèque plus récente. Ils ont des dépendances/support pour beaucoup d'autres bibliothèques. Ils ont choisi un ensemble différent de compromis en matière de simultanéité et de mise en file d'attente dans les flux (c'est-à-dire de style LMAX Disruptor). Il y avait quelques allers-retours entre lui et RxJava concernant les opérateurs et nous avons commencé à parler d'avoir un pool partagé d'opérateurs.

Akka est fortement dominé par les concepts de type Scala; J'ai eu un peu de mal à le faire fonctionner. L'équipe derrière elle a été impliquée dans le développement de la spécification Reactive-Streams et il existe une bibliothèque Akka-Streams qui est annoncée pour prendre en charge Reactive-Streams, cependant, y accéder est lourd car son API fluide est étroitement liée au modèle d'acteur Akka.

Si vous êtes du côté serveur/bureau/Android, RxJava est généralement un bon choix (et je pense qu'il est mieux documenté que les autres) et vise des opérations asynchrones à haut débit. Si vous êtes plutôt du côté de la latence, Reactor pourrait être un meilleur choix. Je ne connais pas grand-chose aux usages d'Akka-Streams mais j'ai vu un benchmark il y a un an où un serveur web construit autour d'Akka a surpassé Tomcat et Netty + RxJava.

35
akarnokd