623 Stimmen

Was sind die besten Anwendungsfälle für das Akka-Framework?

Ich habe schon viel Gutes über Akka Framework (Java/Scala-Serviceplattform), aber bisher habe ich noch nicht viele konkrete Beispiele für Anwendungsfälle gesehen, für die es sich eignen würde. Daher wäre ich daran interessiert, zu erfahren, wie Entwickler es erfolgreich eingesetzt haben.

Es gibt nur eine Einschränkung: bitte nicht den Fall des Schreibens eines Chatservers einbeziehen. (warum? da dies als Beispiel für viele ähnliche Dinge überstrapaziert wurde)

331voto

Raymond Roestenburg Punkte 4860

Ich habe es bisher in zwei realen Projekten sehr erfolgreich eingesetzt. Beide sind im Bereich der echtzeitnahen Verkehrsinformation (Verkehr wie in Autos auf Autobahnen), verteilt über mehrere Knoten, Integration von Nachrichten zwischen mehreren Parteien, zuverlässige Backend-Systeme. Ich bin noch nicht in der Lage, nähere Angaben zu den Kunden zu machen, aber wenn ich das OK bekomme, kann ich es vielleicht als Referenz hinzufügen.

Akka hat sich bei diesen Projekten wirklich durchgesetzt, auch wenn wir mit der Version 0.7 angefangen haben. (Wir verwenden übrigens Scala)

Einer der großen Vorteile ist die Leichtigkeit, mit der man ein System aus Akteuren und Nachrichten fast ohne Boilerplating zusammenstellen kann, es skaliert extrem gut ohne die Komplexität von handrolliertem Threading und man bekommt asynchrone Nachrichtenübermittlung zwischen Objekten fast umsonst.

Es eignet sich sehr gut für die Modellierung jeder Art von asynchroner Nachrichtenverarbeitung. Ich würde es vorziehen, jede Art von (Web-)Dienstesystem in diesem Stil zu schreiben und nicht in einem anderen. (Haben Sie jemals versucht, einen asynchronen Webdienst (auf der Serverseite) mit JAX-WS zu schreiben? das ist eine Menge Arbeit). Ich würde also sagen, jedes System, das nicht an einer seiner Komponenten hängen bleiben will, weil alles implizit über synchrone Methoden aufgerufen wird, und diese eine Komponente an etwas hängt. Es ist sehr stabil und die "let-it-crash + supervisor"-Lösung für Fehler funktioniert wirklich gut. Alles ist einfach programmatisch einzurichten und nicht schwer zu testen.

Und dann gibt es noch die hervorragenden Zusatzmodule. Das Camel-Modul fügt sich wirklich gut in Akka ein und ermöglicht die einfache Entwicklung von asynchronen Diensten mit konfigurierbaren Endpunkten.

Ich bin sehr zufrieden mit dem Framework, und es entwickelt sich zum Standard für die vernetzten Systeme, die wir entwickeln.

227voto

Viktor Klang Punkte 26185

Haftungsausschluss: Ich bin der PO für Akka

Außerdem bietet es ein Sammelsurium an Gleichzeitigkeit, das viel einfacher zu begründen und zu korrigieren ist (Akteure, Agenten, Datenflussgleichzeitigkeit) und mit Gleichzeitigkeitskontrolle in Form von STM.

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

  1. Transaktionsverarbeitung (online Spiele, Finanzen, Statistik, Wetten, soziale Medien, Telekommunikation, ...)
    • Vergrößerung, Verkleinerung, Fehlertoleranz / HA
  2. Service-Backend (jede Branche, jede Anwendung)
    • Dienst REST, SOAP, cometd usw.
    • als Nachrichtenzentrale/Integrationsschicht fungieren
    • Vergrößerung, Verkleinerung, Fehlertoleranz / HA
  3. Snap-in-Gleichzeitigkeit/Parallelität (beliebige Anwendung)
    • Richtig
    • Einfach zu handhaben und zu verstehen
    • Fügen Sie einfach die Jars zu Ihrem bestehenden JVM-Projekt hinzu (verwenden Sie Scala, Java, Groovy oder JRuby)
  4. Stapelverarbeitung (beliebige Branche)
    • Camel-Integration für den Anschluss an Batch-Datenquellen
    • Akteure teilen und erobern die Batch-Workloads
  5. Kommunikationszentrum (Telekommunikation, Webmedien, mobile Medien)
    • Vergrößerung, Verkleinerung, Fehlertoleranz / HA
  6. Spieleserver (Online-Spiele, Wetten)
    • Vergrößerung, Verkleinerung, Fehlertoleranz / HA
  7. BI/Datenverarbeitung/Allzweck-Crunching
    • Vergrößerung, Verkleinerung, Fehlertoleranz / HA
  8. andere schöne Anwendungsfälle hier einfügen

80voto

Wade Arnold Punkte 1026

Ein Beispiel für die Verwendung wäre eine Prioritätswarteschlange für Debit-/Kreditkartentransaktionen. Wir haben Millionen davon, und der Arbeitsaufwand hängt vom Typ der Eingabezeichenfolge ab. Wenn es sich um eine Transaktion vom Typ CHECK handelt, müssen wir nur sehr wenig verarbeiten, aber wenn es sich um eine Verkaufsstelle handelt, gibt es viel zu tun, wie z. B. die Zusammenführung mit Metadaten (Kategorie, Etikett, Tags usw.) und die Bereitstellung von Diensten (E-Mail-/SMS-Warnungen, Betrugserkennung, niedriger Kontostand usw.). Auf der Grundlage des Eingabetyps stellen wir Klassen mit verschiedenen Eigenschaften (so genannte Mixins) zusammen, die für die Bearbeitung des Auftrags erforderlich sind, und führen dann die Arbeit aus. Alle diese Aufträge kommen in Echtzeit von verschiedenen Finanzinstituten in dieselbe Warteschlange. Sobald die Daten bereinigt sind, werden sie an verschiedene Datenspeicher für die Persistenz und Analyse gesendet oder an eine Socket-Verbindung oder an Lift comet actor weitergeleitet. Die Arbeitsakteure sorgen für einen ständigen Lastausgleich, damit wir die Daten so schnell wie möglich verarbeiten können. Wir können auch zusätzliche Dienste, Persistenzmodelle und stm für kritische Entscheidungspunkte.

Die Nachrichtenübermittlung im Stil von Erlang OTP auf der JVM ist ein hervorragendes System für die Entwicklung von Echtzeitsystemen auf den Schultern bestehender Bibliotheken und Anwendungsserver.

Akka ermöglicht die Weitergabe von Nachrichten wie in einem traditionellen esb aber mit Tempo! Außerdem erhalten Sie im Framework Tools zur Verwaltung der großen Anzahl von Akteurspools, Remote-Knoten und Fehlertoleranz, die Sie für Ihre Lösung benötigen.

47voto

piotrga Punkte 1214

Wir verwenden Akka, um REST-Aufrufe asynchron zu verarbeiten - zusammen mit einem asynchronen Webserver (auf Netty-Basis) können wir eine 10-fache Verbesserung der Anzahl der pro Knoten/Server bedienten Benutzer im Vergleich zum traditionellen Modell mit Threads pro Benutzeranforderung erreichen.

Sagen Sie Ihrem Chef, dass Ihre AWS-Hosting-Rechnung um den Faktor 10 sinken wird, und es ist ein klarer Fall! Pst... sagen Sie es aber nicht Amazon... :)

39voto

Luciano Fiandesio Punkte 9791

Wir verwenden Akka in einem groß angelegten Telco-Projekt (leider kann ich nicht viele Details preisgeben). Akka-Akteure werden eingesetzt und über eine Webanwendung aus der Ferne angesprochen. Auf diese Weise haben wir ein vereinfachtes RPC-Modell, das auf Google protobuffer basiert, und wir erreichen Parallelität mit Akka Futures. Bislang hat dieses Modell hervorragend funktioniert. Ein Hinweis: Wir verwenden die Java-API.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X