Mittwoch, 2. Dezember 2015

Akka.NET Adventskalender – Tür 2

Was ist eigentlich ein Aktor?

So langsam wird es Zeit, dass wir herausfinden, was eigentlich ein Aktor ist. Man kann einen Aktor mit einem Objekt aus der Objektorientierung vergleichen.

  • Ein Aktor speichert einen Zustand (in Form von Feldern und Eigenschaften eines CLR Objektes, das wir bequem in C# anlegen). Der Zustand ist für die Außenwelt gar nicht sichtbar. Das ist wichtig, denn das Aktor Modell versucht, den gefürchteten verteilten Zustand (shared state) mit all seinen Problemen (Locking, Deadlocks, inkonsistente Zustände, etc.) dadurch gar nicht erst aufkommen zu lassen. Nur der Aktor selbst hat Zugriff auf seinen Zustand!
  • Jeder Aktor empfängt Nachrichten, die an ihn gesandt werden und führt Aktionen als Folge davon aus. Alle eintreffenden Nachrichten werden in einer als FIFO organisierten Mailbox gespeichert und nacheinander abgearbeitet. Akka.NET sorgt dafür, dass jeder Aktor immer nur eine Nachricht zu jedem Zeitpunkt verarbeitet. Das bedeutet dann leider auch, dass wir typischerweise keine weiteren parallelen Aktionen (z.B. in Form von Tasks) innerhalb eines Aktors ausführen. Das ist einzig die Aufgabe der Laufzeit-Umgebung von Akka.NET.
  • Ein Aktor kann wahlweise verschiedene Verhalten annehmen. So wie wir Menschen mal gut oder schlecht gelaunt sind, kann ein Aktor Zustände (im Sinne eines Zustandsautomaten) annehmen. Technisch gesehen reagiert der Aktor je nach Zustand anders auf Nachrichten, die ihm zugestellt werden.
  • Aktoren dürfen Kind-Aktoren erzeugen, kontrollieren und wieder beenden. Kind-Aktoren und deren korrekte Beaufsichtigung sind der Schlüssel für belastbare Systeme. Wie im täglichen leben: Eltern haften für ihre Kinder. Typischerweise baut man damit hierarchisch gestaltete Verantwortungs-Bäume auf, die von oben nach unten Aufgaben und vielleicht auch Verantwortung deligieren. Je weiter oben die Aktoren stehen, desto mehr Verantwortung und weniger eigenes Risiko besitzen die Aktoren. Die Aktoren am Ende des Baums führen nur noch einfache Aufgaben aus, müssen aber enventuell riskante Tätigkeiten ausführen, die tödlich enden können.

Wo leben die Aktoren?

Aktoren leben in Aktor Systemen. Ein Rechner kann beliebig viele Aktor Systeme beherbergen. Die einzelnen Systeme sind aber zunächst voneinander unabhängig, können aber durchaus miteinander arbeiten. Durch entsprechende Konfiguration gesteuert können Aktoren auch auf anderen Systemen erzeugt werden (location transparent) und dort ihre Arbeit verrichten. Als Entwickler spürt man zunächst keinen Unterschied. Um das zu ermöglichen, werden wir sogenannte Aktor-Referenzen (ActorRef) kennenlernen, die sich wie ein Stellvertreter (Proxy) zum tatsächlichen Aktor Verhalten. Wir sprechen niemals mit dem Aktor direkt sondern immer über die Referenz. Der einzige Unterschied, der möglicherweise auftreten kann, sind Fehler, die z.B. durch Netzwerk-Probleme verursacht werden. Dafür muss man entsprechende Vorkehrungen treffen. Alle Beispiele, die wir in den folgenden Tagen bearbeiten werden, laufen allerdings immer auf dem lokalen Rechner.

Morgen werden wir unseren ersten Aktor erstellen.

Keine Kommentare:

Kommentar veröffentlichen