entspannte nebenläufigkeit 12.03.2014 andi scharfstein, ben romberg entwicklertag 2012

Post on 05-Apr-2015

112 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Entspannte Nebenläufigkeit

11.04.23

Andi Scharfstein, Ben Romberg

Entwicklertag 2012

11.04.23

Quelle: Air Force Weather Agency

11.04.23

Quelle: Air Force Weather Agency

Blackout USA (14.08.2003)

11.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

Das Versprechen

11.04.23

Nie wieder Race Conditions!

Zur Erinnerung: Race Condition

11.04.23

a = 1

Thread 1

a = a + 1

Zur Erinnerung: Race Condition

11.04.23

a = 2

Thread 1

Zur Erinnerung: Race Condition

11.04.23

a = 1

Thread 1

a = a + 1

Thread 2

a = a + 1

Zur Erinnerung: Race Condition

11.04.23

a = 3?

a = 2?

Thread 1 Thread 2

Zur Erinnerung: Race Condition

11.04.23

a = 3?

a = 2?

Thread 1 Thread 2

Problem: Zugriff auf globale Ressourcen!

Eine Alternative

11.04.23

Und wenn wirnur mit lokalenRessourcenarbeiten?

Nebenläufigkeit: Aktoren-Sicht

11.04.23

Aktor 1 Aktor 2

Nachrichtenaustausch

LokaleRessourcen

LokaleRessourcen

Ressourcenin Nachricht

Aktoren-Paradigma

11.04.23

Datenfluss findet ausschließlich in wohldefinierten, gekapselten Einheiten statt

Was bringt mir das?

11.04.23

Race Conditions

Threads Aktoren

Aktorentheorie

11.04.23

Erstmals durch Carl Hewitt (1973)

Motivation: Hunderte vonvernetzten Maschinen effizientparallelisieren

Weiterentwicklung u.a.durch Gul Agha (1986)

Was ist ein Aktor?

11.04.23

Name(Adresse)

Was ist ein Aktor?

11.04.23

Verhalten(Code)

Name(Adresse)

Was ist ein Aktor?

11.04.23

Verhalten(Code)

Zustand(Daten)

Name(Adresse)

Was ist ein Aktor?

11.04.23

Verhalten(Code)

Zustand(Daten)

Mailbox / Message Queue

Name(Adresse)

Was kann ein Aktor?

11.04.23

1. Nachrichten verschicken

Was kann ein Aktor?

11.04.23

1. Nachrichten verschicken

2. Eigenen Zustand/Verhalten ändern

Was kann ein Aktor?

11.04.23

1. Nachrichten verschicken

2. Eigenen Zustand/Verhalten ändern

3. Neue Aktoren erstellen

In welcher Welt leben Aktoren?

11.04.23

• Alle Aktoren laufen immer parallel zueinander

In welcher Welt leben Aktoren?

11.04.23

• Alle Aktoren laufen immer parallel zueinander

• Die Aktoren-Theorie macht keine Aussage über Nachrichtenverhalten

In welcher Welt leben Aktoren?

11.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

Zeit für ein Beispiel

11.04.2311.04.23

MainActor

Zeit für ein Beispiel

11.04.2311.04.23

MainActor SoccerActor

int home = 0;int guest = 0;

Zeit für ein Beispiel

11.04.2311.04.23

MainActor SoccerActor

• GoalForHome• GoalForGuest• GameOver int home = 0;

int guest = 0;

Akka

11.04.23

• Aktoren-Framework, unterstützt Scala und Java

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

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

Demo

11.04.23

Akka – Aktoren Performance

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

ask() statt tell()

11.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

Scaling

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

Monitoring

11.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“)

Aktoren – Do‘s and Don‘ts

11.04.23

• 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

11.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

Fazit

11.04.23

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

— Mike Unum, GE Energy

Fazit

11.04.23

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

— Mike Unum, GE Energy

Besser umdenken anstatt „more of the same“

…dann klappt‘s auch mit dem Strom

11.04.23

Quellen

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

Zur Erinnerung: Deadlock

11.04.23

Gleichzeitiger Zugriffauf globale Ressourcen

Threads vs. Aktoren

11.04.23

Race Conditions

Deadlocks

Threads + Locks Actors

top related