it-swarm.com.de

Guter Anwendungsfall für Akka

Ich habe viel von Akka framework (Java/Scala-Serviceplattform) gehört, aber bisher noch nicht viele Beispiele für Anwendungsfälle gesehen, für die es gut wäre. Ich würde also gerne etwas über Dinge erfahren, die Entwickler erfolgreich eingesetzt haben.

Einzige Einschränkung: Bitte schreibe keinen Chat-Server. (warum? da dies als ein Beispiel für viele ähnliche Dinge überstrapaziert wurde)

590
StaxMan

Ich habe es bisher in zwei realen Projekten sehr erfolgreich eingesetzt. Beide befinden sich im Echtzeit-Verkehrsinformationsfeld (Verkehr wie in Autos auf Autobahnen), sind über mehrere Knoten verteilt, integrieren Nachrichten zwischen mehreren Parteien und bieten zuverlässige Backend-Systeme. Es steht mir noch nicht frei, Angaben zu den Kunden zu machen. Wenn ich das OK erhalte, kann es möglicherweise als Referenz hinzugefügt werden.

Akka hat sich bei diesen Projekten wirklich durchgesetzt, obwohl wir mit Version 0.7 angefangen haben. (wir benutzen übrigens scala)

Einer der großen Vorteile ist die Leichtigkeit, mit der Sie ein System aus Akteuren und Nachrichten nahezu ohne Boilerplating zusammenstellen können. Es lässt sich sehr gut skalieren, ohne die Komplexität des handgerollten Threadings, und Sie erhalten die asynchrone Nachrichtenübermittlung zwischen Objekten fast kostenlos.

Es ist sehr gut in der Modellierung jeder Art von asynchroner Nachrichtenverarbeitung. Ich würde es vorziehen, irgendeine Art von (Web-) Services-System in diesem Stil zu schreiben als in jedem anderen Stil. (Haben Sie jemals versucht, mit JAX-WS einen asynchronen Web-Service (serverseitig) zu schreiben? Das ist viel Klempnerarbeit.) Ich würde also sagen, jedes System, das nicht an einer seiner Komponenten hängen will, weil alles implizit mit synchronen Methoden aufgerufen wird und diese eine Komponente sich auf etwas beschränkt. Es ist sehr stabil und die Let-it-Crash + Supervisor-Lösung für Fehler funktioniert wirklich gut. Alles ist leicht programmierbar und nicht schwer zu testen.

Hinzu kommen die hervorragenden Zusatzmodule. Das Camel-Modul fügt sich hervorragend in Akka ein und ermöglicht die einfache Entwicklung asynchroner Dienste mit konfigurierbaren Endpunkten.

Ich bin sehr zufrieden mit dem Framework und es wird zu einem Defacto-Standard für die verbundenen Systeme, die wir bauen.

316

Disclaimer: Ich bin der PO für Akka

Neben dem Angebot eines Smorgasbord für den gleichzeitigen Zugriff, das viel einfacher zu überlegen und zu korrigieren ist (Akteure, Agenten, gleichzeitiger Datenfluss) und die Kontrolle des gleichzeitigen Zugriffs in Form von STM bietet.

Hier sind einige Anwendungsfälle, die Sie in Betracht ziehen könnten:

  1. Transaktionsverarbeitung (Online-Spiele, Finanzen, Statistiken, Wetten, Social Media, Telekommunikation, ...)
    • scale-up, Scale-out, Fehlertoleranz/HA
  2. Service Backend (jede Branche, jede App)
    • service REST, SOAP, cometd usw
    • fungieren als Message Hub/Integrationsschicht
    • scale-up, Scale-out, Fehlertoleranz/HA
  3. Snap-In-Parallelität (beliebige App)
    • Richtig
    • Einfach zu handhaben und zu verstehen
    • Fügen Sie die Gläser einfach zu Ihrem vorhandenen JVM-Projekt hinzu (verwenden Sie Scala, Java, Groovy oder JRuby).
  4. Stapelverarbeitung (jede Branche)
    • Camel-Integration zur Anbindung an Batch-Datenquellen
    • Akteure teilen und erobern die Batch-Workloads
  5. Kommunikationsdrehscheibe (Telekommunikation, Webmedien, mobile Medien)
    • scale-up, Scale-out, Fehlertoleranz/HA
  6. Spieleserver (Online-Spiele, Wetten)
    • scale-up, Scale-out, Fehlertoleranz/HA
  7. BI/Datamining/Allzweck-Crunching
    • scale-up, Scale-out, Fehlertoleranz/HA
  8. fügen Sie hier weitere Nice Use Cases ein
217
Viktor Klang

Ein Beispiel dafür, wie wir es verwenden, ist eine Prioritätswarteschlange für Debit-/Kreditkartentransaktionen. Wir haben Millionen davon und der Arbeitsaufwand hängt vom Typ der Eingabezeichenfolge ab. Wenn die Transaktion vom Typ CHECK ist, wird nur sehr wenig verarbeitet, aber wenn es sich um eine Verkaufsstelle handelt, gibt es viel zu tun, z. Betrugserkennung, geringes Guthaben usw.). Basierend auf dem Eingabetyp erstellen wir Klassen verschiedener Merkmale (sogenannte Mixins), die für die Ausführung des Auftrags erforderlich sind, und führen dann die Arbeit aus. Alle diese Jobs werden von verschiedenen Finanzinstituten in Echtzeit in dieselbe Warteschlange gestellt. Sobald die Daten bereinigt sind, werden sie zur Persistenz und Analyse an verschiedene Datenspeicher gesendet oder an eine Socket-Verbindung oder an Lift comet actor übertragen. Die arbeitenden Akteure gleichen die Arbeit ständig selbst aus, damit wir die Daten so schnell wie möglich verarbeiten können. Wir können auch zusätzliche Services, Persistenzmodelle und stm für kritische Entscheidungspunkte einbinden.

Die Erlang-OTP-Nachricht, die an die JVM weitergeleitet wird, ist ein hervorragendes System für die Entwicklung von Echtzeitsystemen auf den Schultern vorhandener Bibliotheken und Anwendungsserver.

Mit Akka können Sie Nachrichten wie in einem traditionellen esb senden, aber mit Geschwindigkeit! Außerdem erhalten Sie Tools im Framework, mit denen Sie die große Anzahl von Akteurpools, Remoteknoten und Fehlertoleranzen verwalten können, die Sie für Ihre Lösung benötigen.

78
Wade Arnold

Wir verwenden Akka, um REST Aufrufe asynchron zu verarbeiten - zusammen mit einem asynchronen Webserver (Netty-basiert) können wir die Anzahl der pro Knoten/Server versorgten Benutzer im Vergleich zum herkömmlichen Thread pro Benutzeranforderungsmodell um das Zehnfache verbessern .

Sagen Sie es Ihrem Chef, dass Ihre AWS-Hosting-Rechnung um den Faktor 10 sinken wird, und es ist ein Kinderspiel! Shh ... erzähl es Amazon aber nicht ... :)

42
piotrga

Wir verwenden Akka in einem großen Telekommunikationsprojekt (leider kann ich nicht viele Details preisgeben). Akka-Schauspieler werden von einer Webanwendung bereitgestellt und können von dort aus auf sie zugreifen. Auf diese Weise haben wir ein vereinfachtes RPC-Modell, das auf dem Google-Protopuffer basiert, und wir erzielen Parallelität mit Akka Futures. Bisher hat dieses Modell hervorragend funktioniert. Ein Hinweis: Wir verwenden die Java API.

38

Wenn Sie den Chat-Server auf einer höheren Ebene abstrahieren, erhalten Sie die Antwort.

Akka bietet ein Messaging-System, das Erlang's Mentalität "Let it Crash" ähnelt.

Beispiele hierfür sind Dinge, die unterschiedliche Haltbarkeit und Zuverlässigkeit der Nachrichtenübertragung erfordern:

  • Chat-Server
  • Netzwerkschicht für ein MMO
  • Finanzdatenpumpe
  • Benachrichtigungssystem für ein iPhone/Handy/welche App auch immer
  • REST-Server
  • Vielleicht etwas ähnlich wie WebMachine (rate)

Das Schöne an Akka sind die Entscheidungen, die es für die Persistenz bietet, die STM-Implementierung, der REST -Server und die Fehlertoleranz.

Ärgern Sie sich nicht über das Beispiel eines Chat-Servers, sondern betrachten Sie ihn als Beispiel für eine bestimmte Lösungsklasse.

Bei all ihren exzellenten Dokumentationen ist eine Lücke genau diese Frage, Anwendungsfälle und Beispiele. Denken Sie daran, die Beispiele sind nicht trivial.

(Geschrieben mit nur Erfahrung im Anschauen von Videos und Spielen mit der Quelle, habe ich mit akka nichts implementiert.)

37
tylerweir

Wir setzen Akka in mehreren Projekten ein, von denen das interessanteste im Zusammenhang mit der Reparatur von Fahrzeugunfällen steht. Hauptsächlich in Großbritannien, jetzt aber auch in den USA, Asien, Australien und Europa. Wir setzen Akteure ein, um sicherzustellen, dass Unfallreparaturinformationen in Echtzeit bereitgestellt werden, damit Fahrzeuge sicher und kostengünstig repariert werden können.

Die Frage bei Akka ist eigentlich eher, was man mit Akka nicht machen kann. Seine Fähigkeit, sich in leistungsstarke Frameworks zu integrieren, seine leistungsstarke Abstraktion und alle Aspekte der Fehlertoleranz machen es zu einem sehr umfassenden Toolkit.

24
rossputin

Sie können Akka für verschiedene Arten von Dingen verwenden.

Ich habe an einer Website gearbeitet, auf der ich den Technologie-Stack auf Scala und Akka migriert habe. Wir haben es für so ziemlich alles verwendet, was auf der Website passiert ist. Auch wenn Sie vielleicht denken, dass ein Chat-Beispiel schlecht ist, sind alle grundsätzlich gleich:

  • Live-Updates auf der Website (z. B. Aufrufe, Likes, ...)
  • Live-Benutzerkommentare anzeigen
  • Benachrichtigungsdienste
  • Suche und alle anderen Arten von Dienstleistungen

Besonders die Live-Updates sind einfach, da sie sich auf ein Chat-Beispiel beschränken. Der Serviceteil ist ein weiteres interessantes Thema, da Sie einfach Remote-Akteure verwenden können. Auch wenn Ihre App nicht geclustert ist, können Sie sie problemlos auf verschiedenen Computern bereitstellen.

Ich verwende Akka auch für eine PCB Autorouter-Anwendung mit der Idee, von einem Laptop auf ein Rechenzentrum skalieren zu können. Je mehr Kraft du gibst, desto besser wird das Ergebnis sein. Dies ist äußerst schwierig zu implementieren, wenn Sie versuchen, die übliche Parallelität zu verwenden, da Akka Ihnen auch Standorttransparenz bietet.

Gegenwärtig baue ich als Freizeitprojekt ein Webframework auf, bei dem nur Schauspieler verwendet werden. Die Vorteile liegen wiederum in der Skalierbarkeit von einer einzelnen Maschine zu einem gesamten Maschinencluster. Durch die Verwendung eines nachrichtengesteuerten Ansatzes ist Ihr Softwaredienst zudem von Anfang an orientiert. Sie haben all diese netten Komponenten, die miteinander sprechen, sich aber nicht unbedingt kennen und auf demselben Computer leben, nicht einmal im selben Rechenzentrum.

Und seit dem Herunterfahren von Google Reader habe ich mit einem RSS-Reader begonnen, natürlich mit Akka. Für mich dreht sich alles um gekapselte Dienste. Fazit: Das Schauspieler-Modell selbst ist das, was Sie zuerst übernehmen sollten, und Akka ist ein sehr zuverlässiges Framework, das Ihnen dabei hilft, es mit vielen Vorteilen umzusetzen, die Sie auf Ihrem Weg erhalten werden.

24
Joa Ebert

Wir verwenden akka mit seinem Kamel-Plugin, um unsere Analyse- und Trendverarbeitung für twimpact.com zu verteilen. Wir müssen zwischen 50 und 1000 Nachrichten pro Sekunde verarbeiten. Neben der Multi-Node-Verarbeitung mit Camel wird damit auch die Arbeit an einem einzelnen Prozessor auf mehrere Worker verteilt, um eine maximale Leistung zu erzielen. Funktioniert recht gut, erfordert jedoch ein gewisses Verständnis für den Umgang mit Überlastungen.

18

Wir verwenden Akka in gesprochenen Dialogsystemen ( primetalk ). Sowohl intern als auch extern. Um viele Telefoniekanäle gleichzeitig auf einem einzelnen Clusterknoten ausführen zu können, ist natürlich ein Multithreading-Framework erforderlich. Akka funktioniert einfach perfekt. Wir haben einen Albtraum mit der Java-Parallelität gehabt. Und mit Akka ist es wie mit einer Schaukel - es funktioniert einfach. Robust und zuverlässig. 24 * 7, ohne Unterbrechung.

Innerhalb eines Kanals gibt es einen Echtzeitstrom von Ereignissen, die parallel verarbeitet werden. Insbesondere: - langwierige automatische Spracherkennung - erfolgt mit einem Schauspieler; - Audio-Output-Produzent, der einige Audioquellen mischt (einschließlich synthetisierter Sprache); - Bei der Umwandlung von Text in Sprache handelt es sich um eine separate Gruppe von Akteuren, die von den Kanälen gemeinsam genutzt werden. - Semantik und Wissensverarbeitung.

Um komplexe Signalverarbeitungen miteinander zu verbinden, verwenden wir SynapseGrid . Es hat den Vorteil, dass der DataFlow in den komplexen Aktorsystemen während der Kompilierung überprüft wird.

16

Ich habe kürzlich implementiert das kanonische Beispiel zur Kartenreduzierung in Akka: Word count. Es ist also ein Anwendungsfall von Akka: bessere Leistung. Es war mehr ein Experiment von JRuby und Akkas Schauspieler als alles andere, aber es zeigt auch, dass Akka nicht nur Scala oder Java ist: es funktioniert alle Sprachen auf JVM.

14
Daniel Ribeiro