2012-04-22 4 views
18

Ich suche gerade Play Framework und mag es sehr. Einer der Teile, die unter den in Play angebotenen Funktionen stark beworben werden, ist Akka.Was sind die Sprach- und Produktalternativen zu Akka?

Um Akka besser zu verstehen und wie man es richtig benutzt, können Sie mir sagen, welche Alternativen es in anderen Sprachen oder Produkten gibt?

Wie vergleicht RabbitMQ damit? Gibt es viele Überschneidungen? Ist es praktisch, sie zusammen zu benutzen? In welchen Anwendungsfällen?

Antwort

12

Der beste Ausgangspunkt ist ein great Akka official documentation. Ich denke, das nächste Produkt/Framework zu Akka ist Sprache. Ich erraten (Ich habe Play Framework nicht verwendet) Akka wird dort verwendet, um Comet und andere asynchrone Verarbeitung zu implementieren.

ist in Ideen (Infrastruktur für das Senden von Nachrichten) etwas ähnlich, beachten Sie, dass RabbitMQ sogar in geschrieben wird, aber sie haben leicht unterschiedliche Anwendungsfälle. Ich würde sagen, während sich RabbitMQ auf die Weitergabe von Nachrichten konzentriert, geht es bei Akka mehr um Akteure (Nachrichtenempfänger und Absender).

+17

RabbitMQ ist ein AMQP-Broker, d.h. ein Transport. Akka ist ein Nebenläufigkeits-/Skalierbarkeits-/Fehlertoleranz-Toolkit. Sie können AMQP als Akka Actor-Postfächer oder als Akka-Remoting-Transport verwenden. –

+0

Danke für die Antwort, nur um zu bestätigen, wenn ich mehrere Java-Anwendungen habe, ich will, dass sie kommunizieren, ich brauche rabbitmq. Zum Beispiel 2 getrennte Spiele 2 Apps, separate Maschinen, akka kann nicht der verbindende Rahmen sein, ich brauche jms oder rabbitmq, ist das korrekt? –

+5

Sie können JVMs mit Remote-Actors "beitreten", sie kommen mit einem Standardtransport, der auf Netty basiert. –

7

Der beste Rat, den ich anbieten kann, da ich auch denselben Denkprozess durchlief, als Play 2.0 Typesafe beitrat und anfing, Akka mehr zu benutzen, ist nach "Actor model" zu suchen.

Wikipedia ist eine großartige Ressource - http://en.wikipedia.org/wiki/Actor_model. Es enthält eine Liste von Programmiersprachen, die das Actor-Modell unterstützen können, sowie eine Liste von Frameworks (einschließlich Akka), die auf dem Actor-Modell basieren.

Einfach ausgedrückt basiert das Actor-Modell auf dem Konzept der Akteure in einem simultanen Berechnungsmodell. Akteure bedeuten nicht unbedingt die Weitergabe von Nachrichten, aber die häufigsten Anwendungsfälle werden Akteure haben, die Nachrichten weitergeben (wo die Ähnlichkeiten mit rabbitMQ hereinkommen).

+8

Kleine Korrektur mit großer Wirkung: Schauspieler können NUR Botschaften übergeben, das ist das Wesentliche des Konzepts. Akteure sind ein Modell der Berechnung, während rabbitMQ ein Mittel ist, um Nachrichten weiterzugeben, daher leben sie auf verschiedenen Abstraktionsebenen. –

15

Ich benutze RabbitMQ + Spring AMQP + Guavas EventBus, um Schauspieler-wie Boten unter Verwendung Guava's EventBus for pattern matching die empfangenen Nachrichten automatisch zu registrieren.

Die Ähnlichkeit zu Spring AMQP und Akka ist unheimlich. Spring AMQPs SimpleMessageListenerContainer + MessageListener entspricht ziemlich einem Schauspieler.

jedoch für alle Absichten und Zwecke RabbitMQ ist leistungsstarke als Akka, dass es viele Client Implementierungen in verschiedenen Sprachen hat, Persistenz bietet (Durable Warteschlangen), topologischen Routing und steckbare QoS-Algorithmen .

Das ist gesagt Akka ist viel bequemer und in der Theorie Akka kann alle oben genannten und einige Leute haben Erweiterungen geschrieben, aber die meisten verwenden nur Akka und dann haben Akka die Nachrichten über RabbitMQ liefern. Auch der Spring AMQP SimpleMessageListener-Container ist ziemlich schwer und es ist unklar, was passieren würde, wenn Sie ein paar Millionen davon erstellen würden.

Im Nachhinein würde ich die Verwendung von Akka zu RabbbitMQ statt Spring AMQP für zukünftige Projekte in Betracht ziehen.

+1

Akka unterstützt dauerhafte Postfächer, die den beständigen Warteschlangen ähneln, die RabbitMQ bereitstellt. –

+1

Ja, das habe ich kürzlich herausgefunden. Mein Hauptanliegen bei Akka ist, dass Sie, wenn Sie Java benutzen, um mit ihm zu interagieren, viel Casting zu haben scheinen. Die andere Sache ist, es gibt amqp Clients in anderen Sprachen wie Python. –

+0

Laut http://letitcrash.com/post/29988753572/akka-amqp-proxies kann Akka AMQP als Transport verwenden. AMQP ist ein Standard-Protokoll auf Wire-Level, so dass Akka oder irgendeine Programmiersprache oder Betriebsumgebung nicht davon ausgeschlossen ist, es als Transportmittel zu verwenden, um mit Clients zu kommunizieren, die in anderen Programmiersprachen geschrieben sind. –

1

Akka ist ein Toolkit und Laufzeit für gleichzeitige & verteilt Systeme zu bauen. Um dies zu erreichen, verwenden Akka Actor-Modell. Wenn Sie eine günstige Alternative für Akka suchen, ich glaube, Sie nicht eine komplette Lösung wie Akka finden können, weil Akka mehrere Funktionen, die es Ihnen ermöglichen, entwickeln robuste gleichzeitige & verteilt System:

  • Akka Schauspieler Routing
  • Schauspieler, Überwachung und Kontrolle
  • Asynchrone und nicht-blockierende Nachrichten
  • Akka Cluster (für Cluster-Management)
  • Akka Persistenz (für die Umsetzung Ereignis Sourcing, Ausdauer Schauspieler und At-Least-Once Lieferung Messaging)
  • Akka I/O (für TCP & UDP-Kommunikation)
  • HTTP Akka (für HTTP-Kommunikation als Client oder Server)
  • Akka Strom (für Stream-Verarbeitung)
  • ...

Aber ich schlage vor, einen Blick auf Erlang/OTP und Quasar zu nehmen.

+0

Für einen Vergleich mit Quasar, schlage ich auch vor, einen Blick auf http://blog.paralleluniverse.co/2015/05/21/quasar-vs-akka/ zu werfen. Beachten Sie, dass Galaxy noch nicht produktionsbereit ist (es wird bald sein), aber auf der anderen Seite sind Quasar Actors so ähnlich wie Erlang (und somit so einfach), dass die Integration mit praktisch jeder Messaging-Lösung extrem einfach ist und wir werden es bald tun schreibe mehr darüber. DISCLAIMER: Ich bin Teil des Quasar-Teams. – circlespainter

1

http://scalecube.io ist eine Low-Latency-Microservices-Bibliothek. eine Komplettlösung, die es Ihnen ermöglicht, ein robustes, paralleles & verteiltes System zu entwickeln.

Wie Akka: - es basiert auf Klatsch und schwimmen Protokoll. - seine Nachricht basiert auf Protobuf (Vollduplex). - es ist für die JVM. - geringe Latenz und ca. ~ 6-mal schneller. - verwendet RxJava nachweislich schneller als Akka-Streams.

Im Gegensatz zu Akka: - seine weniger eigenwillig - kein Framework. - Actor-Muster als holistisches Muster nicht zwingend.

+0

Es scheint, dass es nichts für Persistenz hat. Vielleicht, anderes Biest? – user2108278