akka - gi.de · locks, mutexe, semaphoren konflikt-stelle wird durch einen "lock"...
TRANSCRIPT
![Page 1: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/1.jpg)
Akka.NETAktor basierte Programmierung in .NET
![Page 2: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/2.jpg)
Taktfrequenzstagniert
zunehmendeAnzahl Kerne
CPU Entwicklung
![Page 3: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/3.jpg)
Parallel ProgrammierungAufgabenstellung muss parallelisierbar sein
Kommunikation zwischen Ausführungs-Einheiten
Zugriff auf gemeinsame Ressourcen bzw. Daten regeln
![Page 4: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/4.jpg)
Locks, Mutexe, SemaphorenKonflikt-Stelle wird durch einen "Lock" geschützt
eventuell warten andere Ausführungs-Einheiten auf Freigabe
Gefahr von Deadlocks
geringe Effizienz
![Page 5: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/5.jpg)
Andere VerfahrenProblem: veränderliche Daten, gemeinsame Ressourcen
Funktionale Programmierung
Lambda Architektur
Channels, Streams
Actor Model
![Page 6: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/6.jpg)
Aktor ModellErfinder: Carl Hewitt 1973
Programmiersprachen: Erlang, Elixir, D, Scala, ...
Toolkits: Akka (JVM), Akka.NET Frameworks: Service Fabric, Orleans…
![Page 7: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/7.jpg)
Reactive!„menschlich“, natürlich
auf Ereignisse reagieren
eventuell Umwege gehen
Veränderungen mitteilen
![Page 8: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/8.jpg)
http://reactivemanifesto.org/deAntwortbereit
Nachrichtenorientiert
Elastisch Widerstandsfähig
![Page 9: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/9.jpg)
Reactive ManifestoAntwortbereit:unter allen Umständen antworten
Widerstandsfähig:bei Fehlern stabil bleiben
Elastisch:auch bei Last antwortbereit bleiben
Nachrichtenorientiert:entkoppelt, asynchrone Nachrichten
![Page 10: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/10.jpg)
Was ist ein Aktor?Speicherungeines internen Zustandes
Verarbeitungeintreffender Nachrichten
Kommunikationmit anderen Aktoren
![Page 11: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/11.jpg)
Aktor HierarchieEigene Aktoren unter /user
„Eltern haften für ihre Kinder“ (guardian)
oben: Verantwortung, unten: Risiko
Erzeugen:
system.ActorOf(…)
Context.ActorOf(…)
![Page 12: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/12.jpg)
Aktor BestandteileAktor
Mailbox
Verhalten
Zustand
Überwachungs-Strategie
Kinder
1 2 3 4 5
Nachrichten -> Mailbox
sequentiell abarbeiten
immer nur ein Thread pro Aktor!
![Page 13: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/13.jpg)
Aktor VerhaltenZustandsautomatinitial: Receive
Umschalten:
Become(NeuerZustand);
Je nach Zustand anderes Verhalten
unerwartete Nachrichten: Fehler, verwerfen oder "aufschieben"
![Page 14: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/14.jpg)
Aktor ZustandAktor wird durch C# Klasse repräsentiert
Felder und Eigenschaften spiegeln Zustand wieder
Sobald Aktor „stirbt“: Zustand verlorenAusnahme: PersistentActor
![Page 15: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/15.jpg)
Überwachungs Strategie"Eltern haften für ihre Kinder"
Optionen:
Resume: einfach weitermachen
Restart: neu starten (Standard)
Stop: anhalten
Escalate: an nächsthöhere Stelle melden
![Page 16: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/16.jpg)
KinderPfad: tiefer in Hierarchiez.B. /user/A --> /user/A/Kind
Überwachungsstrategie wählbar
Benachrichtigung beim Kind-Beenden
In Hierarchie navigierbarChild("name") / Children() / Parent
![Page 17: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/17.jpg)
Aktor SystemLaufzeitumgebung
/system, /user guardian
verwaltet Threads, steuert Aktoren
globale Dinge z.B. Log, EventStream
Steuerung via Konfiguration
![Page 18: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/18.jpg)
Aktor ansprechenniemals über Objekte! Ortsunabhängigkeit!
via ActorRef (zeig mir den Weg dorthin)z.B. akka.tcp://hello@host:8080/user/x
via ActorSelection Muster von Pfaden ala Terminal /user/x/*
über vordefinierte Methodenz.B. Context.System.EventStream
![Page 19: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/19.jpg)
Nachrichten sendenwahlweise via ActorRef
actor.Tell("huhu");
actor.Tell(42L);
actor.Tell(new MessageClass(...));
oder via ActorSelection
Context.ActorSelection("x/*").Tell(...);
![Page 20: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/20.jpg)
Nachrichten-TypenCommand: Imperativ
HandleMeasure / StoreSomething
Event: Vergangenheit
MeasureHandled / SomethingStored
Document: Substantiv
Measure / Something
![Page 21: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/21.jpg)
Umdenken!ausschließlich asynchrone Nachrichten
"Tell – don't Ask"
Kein Zugriff auf Eigenschaften
alle ausgetauschten Objekte müssen unveränderlich sein!
lange Operationen vermeiden
![Page 22: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/22.jpg)
Patternsca. 100 verzeichnet
![Page 23: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/23.jpg)
Aktor System in C#ActorSystem
anlegen
Actor
NuGet: Akka
![Page 24: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/24.jpg)
Nachrichten verarbeitenBasisklasse
bestimmt Art der Verarbeitung
"Empfangs-bereitschaft"
Nachricht Typ
Verhalten. Lambda oder
Methodenaufruf
identisches Verhalten
identisches Verhalten
![Page 25: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/25.jpg)
Aktor erzeugenProps: Argumente für Konstruktornotwendig wegen Ortsunabhängigkeit
Aktor erzeugen
Huhu – unsere erste Nachricht
wird an Konstruktor übergeben
Name in Hierarchie
![Page 26: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/26.jpg)
AnwendungsgebieteParallelisierung
Kommunikationsintensive Vorgänge
Realisierung von technischen Abläufen
Modellierung von Geschäftsprozessen
Verteilte Anwendungen
![Page 27: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/27.jpg)
ParallisierungAufteilung einer Aufgabe auf mehrere „Rechen-Aktoren“
dabei: parallele Verarbeitung
Resultat: schnell
Worker Worker Worker
![Page 28: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/28.jpg)
Parallelisierung: RouterBerechnung Delegieren auf Router
Router entscheidet wer rechnet
Router leitet weiter, Worker antwortet
1
CalculatePi
4
double
Master
WorkerRouter3
CalculateRange
2
CalculateRange
WorkerWorker
via Forward
![Page 29: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/29.jpg)
Parallelisierung: CodeWorker und Router anlegen:
Berechnung ausführen:
![Page 30: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/30.jpg)
KommunikationBeispiel Event Storming
Kollaboration
aus Chaos wird Ordnung
Jeder leistet seinen Anteil
![Page 31: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/31.jpg)
Kommunikation: SudokuAngaben werden nacheinander bestückt
Zelle kennt ihren Inhalt und teilt ihn mit81 Aktoren
Zeile, Spalte und Block zählt Ziffern27 Aktoren
Summe: 108 Aktoren
![Page 32: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/32.jpg)
Kommunikation: Lösen
![Page 33: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/33.jpg)
GeschäftsprozesseModellierung: Patterns von Domain-Driven Design
Realisierung: CQRS/ES
Schreibendes vs. lesendes Modell
Persistierung: Ereignisse
Wiederherstellung: Ereignis-Strom
![Page 34: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/34.jpg)
CQRS
© Martin Fowler
![Page 35: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/35.jpg)
CQRS/ES: CommandKommando wird validiert
Event wird persistiert (Event Sourcing)
Event wird angewandt
1
Command
Persistent Actor
2
Event
Persistent View
3
Event
![Page 36: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/36.jpg)
CQRS/ES: View aktualisierenpassende Events gelangen zum View
dadurch aktueller Zustand
Persistent Actor
Persistent View
2
Event
4
Event
![Page 37: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/37.jpg)
CQRS/ES: View abfragenVorhandene Daten
Abfrage preiswert
Persistent Actor
Persistent View
5
Query
6
Answer
![Page 38: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/38.jpg)
CQRS/ES: Actorunsere Basisklasse
Akka.Persistence definiert PersistentActorZustand
Schlüssel
KommandosEreignisse
![Page 39: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/39.jpg)
CQRS/ES: Actor AblaufDefinition
evtl. Validierung
Persistierung
Definition
Ausführung
![Page 40: Akka - gi.de · Locks, Mutexe, Semaphoren Konflikt-Stelle wird durch einen "Lock" geschützt eventuell warten andere Ausführungs-Einheiten auf Freigabe Gefahr von Deadlocks](https://reader031.vdocuments.pub/reader031/viewer/2022040715/5e1dfff7b0d7f348be6160e0/html5/thumbnails/40.jpg)
Akka.NET – Fazituniversell einsetzbares Toolkit
viele Einsatzgebiete
neue Muster
hohe Zuverlässigkeit
zukunftsträchtig