Entspannte Nebenläufigkeit Andi Scharfstein, Ben Romberg Entwicklertag 2012
Quelle: Air Force Weather Agency
Quelle: Air Force Weather Agency
Blackout USA ( ) Ursache: Race Condition We test exhaustively, we test with third parties, and we had in excess of three million online operational hours in which nothing had ever exorcised that bug. I'm not sure that more testing would have revealed that. Mike Unum, GE Energy
Das Versprechen Nie wieder Race Conditions!
Zur Erinnerung: Race Condition a = 1 Thread 1 a = a + 1
Zur Erinnerung: Race Condition a = 2 Thread 1
Zur Erinnerung: Race Condition a = 1 Thread 1 a = a + 1 Thread 2 a = a + 1
Zur Erinnerung: Race Condition a = 3? a = 2? Thread 1 Thread 2
Zur Erinnerung: Race Condition a = 3? a = 2? Thread 1 Thread 2 Problem: Zugriff auf globale Ressourcen!
Eine Alternative Und wenn wir nur mit lokalen Ressourcen arbeiten?
Nebenläufigkeit: Aktoren-Sicht Aktor 1Aktor 2 Nachrichtenaustausch Lokale Ressourcen Ressourcen in Nachricht
Aktoren-Paradigma Datenfluss findet ausschließlich in wohldefinierten, gekapselten Einheiten statt
Was bringt mir das? Race Conditions ThreadsAktoren
Aktorentheorie Erstmals durch Carl Hewitt (1973) Motivation: Hunderte von vernetzten Maschinen effizient parallelisieren Weiterentwicklung u.a. durch Gul Agha (1986)
Was ist ein Aktor? Name (Adresse)
Was ist ein Aktor? Verhalten (Code) Name (Adresse)
Was ist ein Aktor? Verhalten (Code) Zustand (Daten) Name (Adresse)
Was ist ein Aktor? Verhalten (Code) Zustand (Daten) Mailbox / Message Queue Name (Adresse)
Was kann ein Aktor? Nachrichten verschicken
Was kann ein Aktor? Nachrichten verschicken 2.Eigenen Zustand/Verhalten ändern
Was kann ein Aktor? Nachrichten verschicken 2.Eigenen Zustand/Verhalten ändern 3.Neue Aktoren erstellen
In welcher Welt leben Aktoren? Alle Aktoren laufen immer parallel zueinander
In welcher Welt leben Aktoren? Alle Aktoren laufen immer parallel zueinander Die Aktoren-Theorie macht keine Aussage über Nachrichtenverhalten
In welcher Welt leben Aktoren? Alle Aktoren laufen immer parallel zueinander Die Aktoren-Theorie macht keine Aussage über Nachrichtenverhalten Nachrichten dürfen Reihenfolge tauschen oder sogar komplett verloren gehen
Zeit für ein Beispiel MainActor
Zeit für ein Beispiel MainActorSoccerActor int home = 0; int guest = 0;
Zeit für ein Beispiel MainActorSoccerActor GoalForHome GoalForGuest GameOver int home = 0; int guest = 0;
Akka Aktoren-Framework, unterstützt Scala und Java Gründer: Jonas Bonér (Typesafe) Bereits im Einsatz bei Amazon, AutoDesk, Credit Suisse, vmware
Demo
Akka – Aktoren Performance Reaktives Modell (eventbasiert) Thread Pool mit eigenem Scheduler für leichtgewichtige Aktoren-Threads Sehr gute Performance (Zahl von Aktoren im Millionenbereich, 50 Mio. Nachrichten / sec.)
ask() statt tell() Ebenfalls asynchron, aber mit Rückgabewert Rückgabewert ist eine Future Futures können –synchron (blockierend) abgefragt werden –mit internen Datenstrukturen weiterverarbeitet werden –einen Callback aufrufen
Scaling Dank Location Transparency können Aktoren beliebig verteilt werden (Remoting) Umverteilung im lokalen Hauptspeicher Andere Kerne der gleichen Maschine (scaling up) Andere Maschinen im gleichen Netz (scaling out)
Monitoring Aktoren haben immer einen Supervisor Sie formen untereinander eine Baumhierarchie Fehler werden eskaliert und an der richtigen Stelle gefangen Riskante Operationen werden in eigenem Aktor isoliert (error kernel pattern)
Aktoren – Dos and Donts Kommunikation zwischen Aktoren sollte ausschließlich über Nachrichten stattfinden Nachrichten sollten nur aus Immutable Objects bestehen Nie wieder Race Conditions
Komplexeres Beispiel: Crawler für Wikipedia-API Sehr einfach zu realisieren und äußerst performant Thread-Pool mit z.B. 10 Threads Crawler Artikel-ID Artikel-Details startet Kategorie-IDKategorie-Details startet DB Cache (Batch Insert) startet
Fazit I'm not sure that more testing would have revealed that. Mike Unum, GE Energy
Fazit I'm not sure that more testing would have revealed that. Mike Unum, GE Energy Besser umdenken anstatt more of the same
…dann klappts auch mit dem Strom
Quellen Rajesh K. Karmani, Gul Agha: Actors (2011) Philipp Haller, Frank Sommers: Actors in Scala (2012) Akka Dokumentation ( 2012) Ben Romberg: Intopedia: Personalisierte Beitragsempfehlungen für die Wikipedia (2010)
Zur Erinnerung: Deadlock Gleichzeitiger Zugriff auf globale Ressourcen
Threads vs. Aktoren Race Conditions Deadlocks Threads + LocksActors