Live aus Sistrans
Vortragende: Mathias Feitzinger, Christian Schaiter
Die Welt der Softwareentwicklung hat sich in den letzten Jahren massiv geändert, Verteilung und Nebenläufigkeit sind heute ein Muss für jedes größere Projekt. Azure und Docker geben auch uns den infrastrukturellen Weg vor. Jedoch muss auch die Software für die neuen Herausforderungen gerüstet sein. Mit Hilfe des ActorModels können wir unsere Softwarearchitektur von Grund auf skalier- und verteilbar designen.
Die Themen:
+ Alles ist ein "Actor"
+ Async, await waren gestern
+ Verteilung der Software auf mehrere Rechenzentren
+ Wie werde ich der Datenflut gerecht (von SQL zu Event Sourcing)
+ Zusammenspiel mit Docker, Azure, ServiceFabrik
Aufgrund des Umfanges des Themas wird diese Schulung aus mindestens 2 Nachmittagen bestehen.
2. Actor Model … aber warum?
Copyright: http://globalnerdy.com
Moore’s
Law!
Alles paletti?
2
3. Actor Model … aber warum?
Copyright: http://mba.eckovation.com
3
Lösung:
Parallele Programmierung?
4. Actor Model … aber warum?
4
// Invariant of the class: A countdown stops with 0 and cannot become negative.
public class CountDown {
// Internal state of the class. Value must not be negative.
private int value;
public CountDown(int start) { value = start; }
public void Decrement() {
// We ensure that the countdown never becomes negative
if (value > 0) {
Thread.Sleep(100); // Some longer running (blocking) operation
value -= 1;
}
}
public int Value => value;
}
5. Actor Model … aber warum?
5
Deadlock
Livelock
Race Conditions
Starvation
Ohne Synchronisierung
Lost Updates
Memory visibility
Mit Synchronisierung
6. Actor Model … aber warum?
6
Paralleles
Programmieren
ist schwer!
13. ● 1973 von Carl Hewitt entwickelt
● Erlang, Scala
● Grundlegendes Software Modell
○ ähnlich zu Objektorientierung
ALLES IST EIN ACTOR
Actor System
13
Copyright: Brian Storti
14. ● Akka > Opensource für Java
● Akka.net > Akka portiert auf .Net
● NuGet
● http://getakka.net/
Actors für .Net > Akka.net
14
Copyright: Brian Storti
15. Actors für .Net > Akka.net
15
Konzept
● Asynchrones Senden von Nachrichten
● Nachrichten sind immutable
● Immer nur eine Nachricht in
Verarbeitung
Actors haben
● Eine Mailbox
● Einen Parent
● Behaviour
● State
● Kinder
Copyright: github.com/EdwinW
17. Actors für .Net > Akka.net
17
Konzept
● Asynchrones Senden von Nachrichten
● Nachrichten sind immutable
● Immer nur eine Nachricht in
Verarbeitung
Actors haben
● Eine Mailbox
● Einen Parent
● Behaviour
● State
● Kinder
Copyright: github.com/EdwinW
18. ● Actors sind Rudeltiere (ᵔᴥᵔ)
○ Actor alleine kann nicht viel ausrichten
○ Geben größere Arbeiten an andere Actors ab
● Mehrere Millionen Actors in einem echten
System
● 1 Actor ≙ 300 bytes
Actors come in systems
18
19. Location Transparency
19
● Keine direkter Zugriff auf Actor
● Location Transparency:
○ LocalActorRef
○ RemoteActorRef
● State und Behaviour eines Actors somit immer Private
● ActorSelection -> Zugriff auf einen beliebigen Actor im System
20. Jeder Actor hat eine eindeutige Adresse
akka://mySystem@localhost:4091/user/
IoTSupervisior/DeviceManager/
DeviceGroup1/Device2
Actor Path
20
22. Beispiel Calculator System
22
● Befehle von der Console lesen und parsen
○ Addition => “4+3”
○ Question of Life => “Question”
● Berechnung durchführen
● Resultate ausliefern
Anforderungen an die Architektur:
● Das ganze am besten multithreaded
○ daher mehrere Berechnungen parallel
● Ohne Codeänderungen verteilbar!!!
○ Soll in verschiedensten Rechenzentren verteilt sein
○ (Akka Teil 2 -> 7. Dezember 2017)