Donnerstag, 17. Dezember 2015

Akka.NET Adventskalender – Tür 17

Die Router im Einzelnen

Hoffentlich hat sich Dein Frust von gestern über die umständliche Lösung wieder gelegt. Aber ich denke es macht Sinn, so grundlegende Dinge wie einen Router zu verstehen. Es könnte Umstände geben, unter denen Du möglicherweise doch einen speziellen Router benötigst und Dir die Bordmittel von Akka.NET eben nicht weiter helfen.

Ansonsten werden wir uns jetzt den Weg ansehen, auf dem wir das gestrige Problem auch ohne einen eigenen Router hätten lösen können. Wir hätten im Inneren unseres Master Routers diese Sequenz verwenden können, um unsere Worker zu erzeugen:

worker = Context.ActorOf(
    Props.Create<Worker>()
         .WithRouter(new RoundRobinPool(NrWorkers))
);

Technisch gesehen wäre genau das gleiche passiert wie mit unserem Router Marke Eigenbau. Akka.NET kennt eine Vielzahl an verschiedenen Router Modellen, die auf die gleiche Weise zum Einsatz kommen können.

Zunächst unterscheidet Akka.NET zwischen

  • Pool: hierbei werden die Aktoren vom Router angelegt
  • Group: es werden Pfade auf vorhandene Aktoren dem Router übergeben. Mittels einer ActorSelection wird dem bzw. den ausgewählten Routern die Nachrichten übermittelt.
Und was die Routing Strategien angeht, so stehen zur Verfügung:
  • RoundRobin: reihum wird der nächste der zur Verfügung stehenden Aktoren beauftragt.
  • Broadcast: alle Aktoren erhalten die Nachricht gleichzeitig
  • Random: ein Ziel-Aktor wird zufällig gewählt
  • ConstantHash: basierene auf eine Eigenschaft der Nachrichten (z.B. eine ID) wird einer der Ziel-Aktoren ausgewählt. So kann sichergestellt werden, dass eine bestimmte ID für verschiedene Nachrichten-Typen immer beim gleichen Aktor landet. 
  • TailChopping: Sollte ein zufälliger Aktor nicht innerhalb einer gewählten Zeitspanne antworten, so wird ein anderer bestimmt in der Hoffnung, d ass der antwortet
  • ScatterGatherFirstCompleted: Eine Nachricht wird zu allen Routern gleichzeitig gesandt und der, der zuerst die Antwort weiß, gewinnt.
  • Smallest Mailbox: Der Router mit den wenigsten Nachrichten in dessen Mailbox erhält den Zuschlag

Ich möchte an dieser Stelle lieber auf die Akka.NET Dokumentation verweisen, denn dort sind die einzelnen Router und deren Benutzung sehr genau erklärt.

Morgen werden wir uns wieder ein neues Thema vornehmen.

Keine Kommentare:

Kommentar veröffentlichen