Betrachten Sie ein Szenario, in dem ich ein System implementiere, das eingehende Aufgaben mit Akka verarbeitet. Ich habe einen primären Akteur, der Aufgaben empfängt und sie an einige Arbeiterakteure weiterleitet, die die Aufgaben bearbeiten.Was kostet das Erstellen von Schauspielern in Akka?
Mein erster Instinkt besteht darin, dies zu implementieren, indem der Dispatcher für jede eingehende Aufgabe einen Akteur erstellt. Nachdem der Arbeiterakteur die Aufgabe bearbeitet hat, wird er gestoppt.
Dies scheint für mich die sauberste Lösung zu sein, da es dem Prinzip "Eine Aufgabe, ein Akteur" folgt. Die andere Lösung wäre die Wiederverwendung von Akteuren - dies beinhaltet jedoch die zusätzliche Komplexität der Bereinigung und einige Pool-Verwaltung.
Ich weiß, dass Schauspieler in Akka billig sind. Aber ich frage mich, ob mit der wiederholten Erstellung und Löschung von Schauspielern inhärente Kosten verbunden sind. Gibt es versteckte Kosten für die Datenstrukturen, die Akka für die Buchhaltung von Schauspielern verwendet?
Die Last sollte in der Größenordnung von mehreren hundert oder hundert Tasks pro Sekunde liegen - denken Sie daran, dass es sich um einen Produktions-Webserver handelt, der pro Anfrage einen Akteur erstellt.
Die richtige Antwort liegt natürlich in der Profilierung und Feinabstimmung des Systems basierend auf der Art der eingehenden Last. Aber ich fragte mich, ob jemand mir etwas aus eigener Erfahrung erzählen könnte?
SPÄTER EDIT:
ich mehr Details über die Aufgabe zur Hand gegeben sollten:
- Nur aktive Aufgaben N kann zu einem bestimmten Zeitpunkt ausgeführt werden. Wie @drexin darauf hingewiesen hat - das wäre mit Routern leicht lösbar. Die Ausführung von Aufgaben ist jedoch kein einfacher Lauf und es wird Art der Sache gemacht.
- Aufgaben erfordern möglicherweise Informationen von anderen Akteuren oder Diensten und müssen daher möglicherweise warten und einschlafen. Dadurch geben sie einen Ausführungs-Slot frei. Der Slot kann von einem anderen wartenden Akteur eingenommen werden, der nun die Möglichkeit zum Laufen hat. Sie könnten eine Analogie mit der Art und Weise machen, wie Prozesse auf einer CPU geplant werden.
- Jeder Arbeiterakteur muss einen Status bezüglich der Ausführung der Aufgabe behalten.
Hinweis: Ich schätze alternative Lösungen für mein Problem, und ich werde sie auf jeden Fall in Betracht ziehen. Ich möchte aber auch eine Antwort auf die Hauptfrage bezüglich der intensiven Erstellung und Löschung von Akteuren in Akka geben.
Haben Sie irgendwelche vorgeschlagenen Lösungen verwenden? Wir haben genau das gleiche Problem ... – FrEaKmAn
hi !! Hast du eine Antwort gefunden? Wie hast du das Problem gelöst? – naaka
Mein Verständnis ist, dass Schauspieler relativ billig zu erstellen sind.Sie sollten zuerst versuchen, ein Aktorsystem zu entwerfen, mit dem Sie den einfachsten und verständlichsten Code schreiben können. Wenn dies bedeutet, dass eine vorübergehende Aufgabe mit einem eigenen lokalen Zustand in einem kurzlebigen Akteur eingekapselt wird - tun Sie es. Messen Sie dann, und wenn die Leistung nicht gut genug ist, versuchen Sie, das System zu optimieren und die Anzahl der Aktor-Kreationen zu reduzieren, mit dem möglichen Nachteil, dass die Aktor-Logik komplizierter wird. –