Entspannte Nebenläufigkeit

42
Entspannte Nebenläufigkeit 27.06.22 Andi Scharfstein, Ben Romberg Entwicklertag 2012

description

Entspannte Nebenläufigkeit. Entwicklertag 2012. Andi Scharfstein, Ben Romberg. Quelle: Air Force Weather Agency. Quelle: Air Force Weather Agency. Blackout USA (14.08.2003). Ursache: Race Condition - PowerPoint PPT Presentation

Transcript of Entspannte Nebenläufigkeit

Page 1: Entspannte Nebenläufigkeit

Entspannte Nebenläufigkeit

20.04.23

Andi Scharfstein, Ben Romberg

Entwicklertag 2012

Page 2: Entspannte Nebenläufigkeit

20.04.23

Quelle: Air Force Weather Agency

Page 3: Entspannte Nebenläufigkeit

20.04.23

Quelle: Air Force Weather Agency

Page 4: Entspannte Nebenläufigkeit

Blackout USA (14.08.2003)

20.04.23

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

Page 5: Entspannte Nebenläufigkeit

Das Versprechen

20.04.23

Nie wieder Race Conditions!

Page 6: Entspannte Nebenläufigkeit

Zur Erinnerung: Race Condition

20.04.23

a = 1

Thread 1

a = a + 1

Page 7: Entspannte Nebenläufigkeit

Zur Erinnerung: Race Condition

20.04.23

a = 2

Thread 1

Page 8: Entspannte Nebenläufigkeit

Zur Erinnerung: Race Condition

20.04.23

a = 1

Thread 1

a = a + 1

Thread 2

a = a + 1

Page 9: Entspannte Nebenläufigkeit

Zur Erinnerung: Race Condition

20.04.23

a = 3?

a = 2?

Thread 1 Thread 2

Page 10: Entspannte Nebenläufigkeit

Zur Erinnerung: Race Condition

20.04.23

a = 3?

a = 2?

Thread 1 Thread 2

Problem: Zugriff auf globale Ressourcen!

Page 11: Entspannte Nebenläufigkeit

Eine Alternative

20.04.23

Und wenn wirnur mit lokalenRessourcenarbeiten?

Page 12: Entspannte Nebenläufigkeit

Nebenläufigkeit: Aktoren-Sicht

20.04.23

Aktor 1 Aktor 2

Nachrichtenaustausch

LokaleRessourcen

LokaleRessourcen

Ressourcenin Nachricht

Page 13: Entspannte Nebenläufigkeit

Aktoren-Paradigma

20.04.23

Datenfluss findet ausschließlich in wohldefinierten, gekapselten Einheiten statt

Page 14: Entspannte Nebenläufigkeit

Was bringt mir das?

20.04.23

Race Conditions

Threads Aktoren

Page 15: Entspannte Nebenläufigkeit

Aktorentheorie

20.04.23

Erstmals durch Carl Hewitt (1973)

Motivation: Hunderte vonvernetzten Maschinen effizientparallelisieren

Weiterentwicklung u.a.durch Gul Agha (1986)

Page 16: Entspannte Nebenläufigkeit

Was ist ein Aktor?

20.04.23

Name(Adresse)

Page 17: Entspannte Nebenläufigkeit

Was ist ein Aktor?

20.04.23

Verhalten(Code)

Name(Adresse)

Page 18: Entspannte Nebenläufigkeit

Was ist ein Aktor?

20.04.23

Verhalten(Code)

Zustand(Daten)

Name(Adresse)

Page 19: Entspannte Nebenläufigkeit

Was ist ein Aktor?

20.04.23

Verhalten(Code)

Zustand(Daten)

Mailbox / Message Queue

Name(Adresse)

Page 20: Entspannte Nebenläufigkeit

Was kann ein Aktor?

20.04.23

1. Nachrichten verschicken

Page 21: Entspannte Nebenläufigkeit

Was kann ein Aktor?

20.04.23

1. Nachrichten verschicken

2. Eigenen Zustand/Verhalten ändern

Page 22: Entspannte Nebenläufigkeit

Was kann ein Aktor?

20.04.23

1. Nachrichten verschicken

2. Eigenen Zustand/Verhalten ändern

3. Neue Aktoren erstellen

Page 23: Entspannte Nebenläufigkeit

In welcher Welt leben Aktoren?

20.04.23

• Alle Aktoren laufen immer parallel zueinander

Page 24: Entspannte Nebenläufigkeit

In welcher Welt leben Aktoren?

20.04.23

• Alle Aktoren laufen immer parallel zueinander

• Die Aktoren-Theorie macht keine Aussage über Nachrichtenverhalten

Page 25: Entspannte Nebenläufigkeit

In welcher Welt leben Aktoren?

20.04.23

• Alle Aktoren laufen immer parallel zueinander

• Die Aktoren-Theorie macht keine Aussage über Nachrichtenverhalten

• Nachrichten dürfen Reihenfolge tauschen oder sogar komplett verloren gehen

Page 26: Entspannte Nebenläufigkeit

Zeit für ein Beispiel

20.04.2320.04.23

MainActor

Page 27: Entspannte Nebenläufigkeit

Zeit für ein Beispiel

20.04.2320.04.23

MainActor SoccerActor

int home = 0;int guest = 0;

Page 28: Entspannte Nebenläufigkeit

Zeit für ein Beispiel

20.04.2320.04.23

MainActor SoccerActor

• GoalForHome• GoalForGuest• GameOver int home = 0;

int guest = 0;

Page 29: Entspannte Nebenläufigkeit

Akka

20.04.23

• Aktoren-Framework, unterstützt Scala und Java

• Gründer: Jonas Bonér (Typesafe)

• Bereits im Einsatz bei Amazon, AutoDesk, Credit Suisse, vmware

Page 30: Entspannte Nebenläufigkeit

Demo

20.04.23

Page 31: Entspannte Nebenläufigkeit

Akka – Aktoren Performance

20.04.23

• 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.)

Page 32: Entspannte Nebenläufigkeit

ask() statt tell()

20.04.23

• 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

Page 33: Entspannte Nebenläufigkeit

Scaling

20.04.23

• 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)

Page 34: Entspannte Nebenläufigkeit

Monitoring

20.04.23

• 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“)

Page 35: Entspannte Nebenläufigkeit

Aktoren – Do‘s and Don‘ts

20.04.23

• Kommunikation zwischen Aktoren sollte ausschließlich über Nachrichten stattfinden

• Nachrichten sollten nur aus Immutable Objects bestehen

„Nie wieder Race Conditions“

Page 36: Entspannte Nebenläufigkeit

Komplexeres Beispiel: Crawler für Wikipedia-API

20.04.23

Sehr einfach zu realisieren und äußerst performant

Thread-Pool mit z.B. 10 Threads

Crawler

Artikel-ID Artikel-Detailsstartet

Kategorie-ID Kategorie-Detailsstartet

startet

DB Cache

(Batch Insert)

startet

Page 37: Entspannte Nebenläufigkeit

Fazit

20.04.23

“I'm not sure that more testing would have revealed that.”

— Mike Unum, GE Energy

Page 38: Entspannte Nebenläufigkeit

Fazit

20.04.23

“I'm not sure that more testing would have revealed that.”

— Mike Unum, GE Energy

Besser umdenken anstatt „more of the same“

Page 39: Entspannte Nebenläufigkeit

…dann klappt‘s auch mit dem Strom

20.04.23

Page 40: Entspannte Nebenläufigkeit

Quellen

20.04.23

• Rajesh K. Karmani, Gul Agha: Actors (2011)

• Philipp Haller, Frank Sommers: Actors in Scala (2012)

• Akka Dokumentation (http://akka.io, 2012)

• Ben Romberg: Intopedia: Personalisierte Beitragsempfehlungen für die Wikipedia (2010)

Page 41: Entspannte Nebenläufigkeit

Zur Erinnerung: Deadlock

20.04.23

Gleichzeitiger Zugriffauf globale Ressourcen

Page 42: Entspannte Nebenläufigkeit

Threads vs. Aktoren

20.04.23

Race Conditions

Deadlocks

Threads + Locks Actors