von Akka Akka ist eine Implementierung des Aktormodells auf der JVM / Standard-Lib von Skala Aktormodell – 1973 erfunden Verwandt, ähnlich aber anders – MS Orleans („virtual actors“) Grains leben ewig - kein richtiger lifecycle await/async versteckt Message-Passing
bilden eine Hierarchie Eltern passen auf die Kinder auf Aktoren laufen asynchron Aktoren haben keinen nach außen sichtbaren Zustand Lock-Free concurrency
Props So lokal wie möglich (static method) Props.Create(() => new MyActor(params)) IActorRef – der (lokale) Aktor Tell() Forward() Ask() ◦ Langsam, nur für „Einmalsachen“
sind verantwortlich für ihre Kinder Stürzt ein Aktor ab, entscheidet die Supervision-Strategie des Parents, was passiert Default: Restart Nützlich: X Mal Restart, danach Escalate Möglich: Feingranulare Entscheidungen
beliebig viele Childaktoren erstellen. Wird ein Aktor beendet, werden alle seine Childaktoren beendet, auch transitiv. Die Hierachie kann man navigieren Parent Mit Pfaden
beliebig viele Childaktoren erstellen. Wird ein Aktor beendet, werden alle seine Childaktoren beendet, auch transitiv. Die Hierachie kann man navigieren Parent Mit Pfaden
Task<T> zu Aktor: Task<Message> msgTask = DoSomething(); msgTask.PipeTo(Self); Message landet in der Mailbox und kann wie andere Messages verarbeitet werden
"akka.tcp://[email protected]:5678/user/service-b“ Polymorpher High-Perf Serializer Akka.Cluster „fault-tolerant, elastic, decentralized peer-to-peer network of Akka.NET applications with no single point of failure or bottleneck” Cluster Singleton
Bewährtes Programmiermodell 8 Jahre alt, Standard-Scala-Lib Skaliert von klein bis sehr groß Raspberry Pi <> Twitter Kommerzieller Support verfügbar Schwäche: Doku verbesserungswürdig Viel Fortschritt in letzter Zeit
Aktoren, Routing über die Id Ersetzen DB-Transaktionen ◦ One Command at a time (ähnlich Row-Level-Lock) ARs lesen nur 1x bei der 1. Nutzung ◦ Bleiben danach In-Memory ◦ Nur Updates werden persistiert
AR sein FSMs ideal um Prozesslogik abzubilden ◦ Viel weniger „Abfang-Code“ Child-Aktoren übernehmen einzelne Prozessschritte Happy-Path trennen von Error-Handling Error-Handling-Aktoren übernehmen im Fehlerfall