Akka ou Reactor [fermé]


94

Je suis en train de démarrer un nouveau projet (basé sur Java). J'ai besoin de le construire comme une architecture modulaire, distribuée et résiliente.

Je souhaite donc que les processus métier communiquent entre eux, soient interopérables, mais aussi indépendants.

Je regarde en ce moment deux cadres qui, outre leur différence d'âge, expriment 2 points de vue différents:

Que dois-je considérer lors du choix de l'un des cadres ci-dessus?

Pour autant que je sache jusqu'à présent, Akka est toujours en quelque sorte couplé (d'une manière que je dois «choisir» l'acteur auquel je veux envoyer les messages), mais très résilient. Alors que Reactor est lâche (comme cela est basé sur la publication d'événements).

Quelqu'un peut-il m'aider à comprendre comment prendre une bonne décision?

METTRE À JOUR

Après avoir mieux examiné le bus d'événements d'Akka, je crois d'une certaine manière que les fonctionnalités exprimées par Reactor sont déjà incluses dans Akka.

Par exemple, l'abonnement et la publication d'événements, documentés sur https://github.com/reactor/reactor#events-selectors-and-consumers , peuvent être exprimés en Akka comme suit:

final ActorSystem system = ActorSystem.create("system");
final ActorRef actor = system.actorOf(new Props(
    new UntypedActorFactory() {

        @Override
        public Actor create() throws Exception {

            return new UntypedActor() {
                final LoggingAdapter log = Logging.getLogger(
                        getContext().system(), this);

                @Override
                public void onReceive(Object message)
                        throws Exception {
                    if (message instanceof String)
                        log.info("Received String message: {}",
                                message);
                    else
                        unhandled(message);
                }
            };
        }
    }), "actor");

system.eventStream().subscribe(actor, String.class);
system.eventStream().publish("testing 1 2 3");

Par conséquent, il me semble maintenant que les principales différences entre les deux sont:

  • Akka, plus mature, lié à Typesafe
  • Réacteur, stade précoce, lié au printemps

Mon interprétation est-elle correcte? Mais quelle est conceptuellement la différence entre l'acteur d'Akka et le consommateur de Reactor ?


8
Akka n'est pas obligé d'être utilisé par Scala, en fait, une majorité l'utilise depuis Java.
Viktor Klang

1
David: Quelque chose comme: l'API Akka EventBus en concert avec les acteurs Akka implémente le modèle Reactor
Viktor Klang

9
Juste pour clarifier: Reactor n'est pas du tout lié à Spring. Nous excluons intentionnellement toutes les dépendances Spring car, en tant que cadre de base, il n'est pas logique de limiter son utilisation aux seuls utilisateurs de Spring. Quant à la différence entre un acteur et un consommateur: en ce qui concerne Reactor, votre consommateur peut être avec état ou non. Il est supposé que vous souhaiterez utiliser une classe anonyme sans état ou Java 8 lambda, mais ce n'est pas une exigence. Et comme je l'ai mentionné dans ma réponse, le jeu d'outils Reactor est, pour les premières itérations, intentionnellement succinct. Nous n'essayons pas de créer "le prochain Akka".
Jon Brisbin

8
Il suffit de laisser tomber une mention de vertx.io car je pense que c'est dans le même domaine événementiel avec quelques concepts intéressants dans le même esprit pour ceux qui recherchent ..
Ouverture du

1
Après quelques années, je suis également dans une situation similaire, mon application est principalement basée sur un ressort et j'ai maintenant besoin de gérer une fonctionnalité événementielle. Y a-t-il un gagnant clair entre Akka et Spring-Reactor? Je recherche un cadre avec des communautés d'utilisateurs actives au cas où j'atteindrais des scénarios plus compliqués.
tintin du

Réponses:


47

C'est difficile à dire à ce stade, car Reactor est toujours un croquis et je (responsable technique d'Akka) ne sais pas où il ira. Il sera intéressant de voir si Reactor devient un concurrent d'Akka, nous attendons cela avec impatience.

Autant que je puisse voir, dans votre liste d'exigences, Reactor manque de résilience (c'est-à-dire ce que la supervision vous donne dans Akka) et de transparence de localisation (c'est-à-dire se référant à des entités actives d'une manière qui vous permet d'abstraction sur la messagerie locale ou distante; c'est ce que vous impliquer par «distribué»). Pour «modulaire», je ne connais pas assez Reactor, en particulier comment rechercher des composants actifs et les gérer.

Si vous démarrez un vrai projet maintenant et avez besoin de quelque chose qui satisfait votre première phrase, alors je ne pense pas qu'il serait controversé de recommander Akka à ce stade (comme Jon l'a également noté). N'hésitez pas à poser des questions plus concrètes sur SO ou sur la liste de diffusion akka-user .


Merci Roland, j'aime voir que les gens des deux projets contribuent à la réponse. J'essaye actuellement Akka. Comme vous l'aviez prévu, il est assez prématuré de fournir une réponse finale à la question, sauf que Reactor en est encore à ses débuts, donc pas encore adapté à une comparaison. Alors, attendons de voir comment les choses évoluent :-) Merci, David
David Riccitelli

7
Merci pour votre réponse, Roland. Je voulais juste préciser que Reactor n'est pas un concurrent d'Akka. Il existe des similitudes en raison d'un domaine de préoccupation qui se chevauchent concernant les applications asynchrones. Mais Reactor est censé être un cadre de base sur lequel d'autres systèmes peuvent être construits. Ces autres systèmes pourraient chevaucher encore plus avec Akka que Reactor lui-même. Mais dans un avenir prévisible, Reactor restera un cadre qui permet d'autres systèmes et ne sera pas lui-même un cadre complet. Vous devrez retarder la gratification lors de la fusillade Reactor / Akka. ;)
Jon Brisbin

Pas de soucis, je pense que vous vous en sortirez bien, et je suis assez certain que nous verrons une pollinisation croisée à mesure que de plus en plus de bibliothèques entreront dans ce domaine.
Roland Kuhn

37

Reactor n'est pas lié à Spring, c'est un module optionnel. Nous voulons que Reactor soit portable, une base comme Jon l'a souligné.

Je ne serai pas sûr de pousser la production car nous ne sommes même pas Milestone (1.0.0.SNAPSHOT), à cet égard, j'aurais un regard plus approfondi sur Akka qui est un fantastique cadre asynchrone IMO. Pensez également à Vert.x et Finagle qui pourraient être adaptés si vous recherchez une plateforme (la première) ou des futurs composables (la dernière). Si vous vous occupez d' un large éventail de modèles asynchrones, peut-être que GPars vous fournira une solution plus complète.

En fin de compte, nous pourrions certainement avoir des chevauchements, en fait nous nous orientons vers une approche mixte (eventing composable flexible, distribué et non lié à une stratégie de distribution) où vous pouvez facilement trouver des bits de RxJava , Vert.x , Akka, etc. Nous ne sommes même pas avisés par le choix de la langue, même si nous sommes fermement attachés à Groovy, les gens ont déjà lancé les ports de Clojure et Kotlin . Ajoutez à cela le fait que certaines exigences sont dictées par Spring XD et Grails .

Merci beaucoup pour votre intérêt, j'espère que vous aurez plus de points de comparaison dans quelques mois :)


Merci Stéphane, je pense que votre réponse (et le commentaire de Jon, stackoverflow.com/questions/16595393/akka-or-reactor/… ) donne une perspective beaucoup plus claire. Je vais encore attendre avant de marquer la question répondue, comme vous l'avez dit, voyons ce qui apparaîtra dans un proche avenir. Encore une fois, j'apprécie vraiment que les personnes impliquées dans les deux projets aient passé du temps à fournir des informations utiles.
David Riccitelli

Je suis d'accord avec Vert.x. J'avais utilisé Vert.x dans un environnement de production dans quelques projets pour communiquer entre les composants et cela fonctionne de manière transparente.
Gagne le

33

C'est une excellente question et la réponse changera au cours des semaines à venir. Nous ne pouvons faire aucune promesse sur ce à quoi ressemblera la communication inter-nœuds en ce moment simplement parce qu'il est trop tôt. Nous avons encore quelques éléments à assembler avant de pouvoir démontrer le clustering dans Reactor.

Cela dit, ce n'est pas parce que Reactor ne fait pas de communications inter-nœuds OOTB qu'il ne le peut pas . :) On n'aurait besoin que d'une couche réseau assez fine pour coordonner entre les réacteurs en utilisant quelque chose comme Redis ou AMQP pour lui donner une intelligence en cluster.

Nous parlons et prévoyons définitivement des scénarios distribués dans Reactor. Il est trop tôt pour dire exactement comment cela fonctionnera.

Si vous avez besoin de quelque chose qui effectue le clustering en ce moment, vous serez plus sûr de choisir Akka.


Merci Jon, je trouve Reactor très prometteur. Pourtant, j'ai besoin de comprendre s'il existe une différence conceptuelle entre Reactor et Akka, en plus des fonctionnalités qui manquent à Reactor (bien sûr, à ses débuts). En résumé, quelle est la différence conceptuelle entre un acteur dans Akka et un consommateur dans Reactor? J'ai également mis à jour ma question avec un exemple d'événement dans Akka qui, je pense, ressemble à l'abonnement / à la distribution d'événements sur la page Reactor GitHub. Merci.
David Riccitelli

Jon, je lisais votre réponse ici: blog.springsource.org/2013/05/13/… - nous pouvons donc supposer qu'à long terme, Akka et Reactor seront un cadre similaire, supportant à la fois le modèle Reactor et le modèle Actor.
David Riccitelli

Le commentaire ci-dessus n'est plus correct pour les raisons suivantes: stackoverflow.com/questions/16595393/akka-or-reactor/… et stackoverflow.com/a/16674388/565110
David Riccitelli

Je ne comprends pas en quoi ce commentaire est maintenant incorrect? Rien ici ne contredit l'explication de la direction stratégique de Reactor.
Jon Brisbin

1
Je t'ai eu. Oui, vous comprenez bien. Merci d'avoir posé ces questions! :)
Jon Brisbin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.