• Keine Ergebnisse gefunden

Vorlesung 13 vom 22.07.14: Robustheit, Entwurfsmuster und Theorie der Nebenläufigkeit

N/A
N/A
Protected

Academic year: 2022

Aktie "Vorlesung 13 vom 22.07.14: Robustheit, Entwurfsmuster und Theorie der Nebenläufigkeit"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Reaktive Programmierung

Vorlesung 13 vom 22.07.14: Robustheit, Entwurfsmuster und Theorie der Nebenläufigkeit

Christoph Lüth & Martin Ring Universität Bremen Sommersemester 2014

1 [16]

Fahrplan

I Teil I: Grundlegende Konzepte

I Teil II: Nebenläufigkeit

I Teil III: Fortgeschrittene Konzepte

IBidirektionale Programmierung: Zippers and Lenses

IRobustheit, Entwurfsmuster und Theorie der Nebenläufigkeit

2 [16]

Robustheit in verteilten Systemen

Lokal:

I Aktoren können abstürzen - Lösung: Supervisor

Verteilt:

I Nachrichten können verloren gehen I Teilsysteme können abstürzen

I Hardware-Fehler

I Stromausfall

I Geplanter Reboot (Updates)

I Naturkatastrophen / Höhere Gewalt

I Software-Fehler

3 [16]

Zwei-Armeen-Problem

A1 -B A2

-

-

I Unlösbar – Wir müssen damit leben!

I TCP: Drei-Wege-Handschlag + Nummerierte Pakete

4 [16]

Gossipping

N1 N2 N3 N4

N5 N6

-

N7 N8

N9

N10 N11 -

N12

5 [16]

Heartbeats

I Kleine Nachrichten in regelmäßigen Abständen I Standardabweichung kann dynamisch berechnet werden I Φ =−log10(1−F(timeSinceLastHeartbeat))

6 [16]

Akka Clustering

I Verteiltes Aktorsystem

I Infrastruktur wird über gossipping Protokoll geteilt

I Ausfälle werden über Heartbeats erkannt

I Sharding: Horizontale Verteilung der Resourcen

I In Verbindung mit Event-Sourcing sehr mächtig

7 [16]

(Anti-)Patterns: Request/Response

I Problem: Warten auf eine Antwort — Benötigt einen Kontext der die Antwort versteht

I Pragmatische Lösung: Ask-Pattern

importakka.patterns.ask (otherActor ? Request) map {

caseResponse ⇒//

}

I Eignet sich nur für sehr einfache Szenarien I Lösung: Neuer Aktor für jeden Response Kontext

8 [16]

(2)

(Anti-)Patterns: Nachrichten

I Nachrichten solltentypisiertsein

otherActor !"add 5 to your local state" // NO otherActor ! Modify(_ + 5)// YES

I Nachrichten dürfennichtveränderlich sein!

valstate: scala.collection.mutable.Buffer otherActor ! Include(state)// NO otherActor ! Include(state.toList)// YES

I Nachrichten dürfenkeine Referenzenauf veränderlichen Zustand enthalten

varstate = 7

otherActor ! Modify(_ + state)// NO valstateCopy = state

otherActor ! Modify(_ + stateCopy)// YES

9 [16]

(Anti-)Patterns: State-Leaks

I Lokaler Zustand darf auf keinen Fall “auslaufen”!

varstate = 0

(otherActor ? Request) map {caseResponse⇒sender ! RequestComplete }

I Besser?

(otherActor ? Request) map {caseResponse⇒ state += 1; RequestComplete

} pipeTo sender I So geht’s!

(otherActor ? Request) map {caseResponse⇒ self ! IncState

RequestComplete } pipeTo sender

10 [16]

(Anti-)Patterns: Single-Responsibility

I Problem: Fehler in Komplexen Aktoren sind kaum behandelbar

varinterestDivisor = initial defreceive = {

caseDivide(dividend, divisor) ⇒ sender ! Quotient(dividend / divisor) caseCalculateInterest(amount) ⇒

sender ! Interest(amount / interestDivisor) caseAlterInterest(by) ⇒

interestDivisor += by }

I Welche Strategie beiDivByZeroException?

11 [16]

(Anti-)Patterns: Aktor-Beziehungen

M

S1 init

-

S2

init

I Problem: Wer registriert sich bei wem in einer Master-Slave-Hierarchie?

I Slaves sollten sich beim Master registrieren!

IFlexibel / Dynamisch

IEinfachere Konfiguration in verteilten Systemen

12 [16]

Patterns: ...

I “Gefährliche Aufgaben” Kindern übertragen!

I Lange Aufgaben unterteilen

I Aktor Systeme sparsam erstellen

I Futures sparsam einsetzen

I Await.result()nurbei Interaktion mit Nicht-Aktor-Code

I Dokumentation Lesen!

13 [16]

Prozessalgebren und Modelchecking

I Prozessalgebren und temporale Logik beschreibenSystemeanhand ihrerZustandsübergänge

I Ein System ist dabei im wesentlichen eineendliche Zustandsmaschine M=hS,Σ,→imit Zustandsübergang→ ⊆S×Σ×S

I Prozessalgebren erlaubenmehrereZustandsmaschinen und ihre Synchronisation

I Damit modellieren wirnebenläufige Systeme

IZurSpezifikation(CSP) aber auch alsBerechnungsmodell(π-Kalkül)

I Der Trick istAbstraktion: mehrere interne Zustandsübergänge werden zu einem Zustandsübergang zusammengefaßt

14 [16]

Beispiel: ein Flugbuchungssystem

I Operationen des Servers:

I Nimmt Anfragen an, schickt Resultate (mit flid)

I Nimmt Buchungsanfragen an, schickt Bestätigung (ok) oder Fehler (fail)

I Nimmt Stornierung an, schickt Bestätigung

I Unterscheidung zwischeninternerAuswahlu(Server trifft Entscheidung) undexternerAuswahl(Server reagiert)

SERVER= query?(from,to)result!flidSERVER

booking?flid→(ok→SERVERufailSERVER) cancel?flidokSERVER

15 [16]

Beispiel: ein Flugbuchungssystem

I Der Client:

IStellt Anfrage

Iwenn der Flug richtig ist, wird er gebucht;

Ioder es wird eine neue Anfrage gestellt.

CLIENT =query!(from,to)result?flid→ (booking!flid→ (ok→CLIENT

failCLIENT) uCLIENT)

I Das Gesamtsystem — Client und Serversynchronisiert:

SYSTEM=CLIENTkSERVER I Problem:Deadlock

IEs gibtWerkzeuge(Modelchecker, z.B. FDR), um solche Deadlocks in Spezifikationen zu finden

16 [16]

Referenzen

ÄHNLICHE DOKUMENTE

Entwässerungsrinne, 1 Läuferzeile Betonsteinpflaster 16/24/14 cm, ohne Fase, Farbe grau,auf einem Betonbett C 30/37 gepl. Grünfläche mit Begrünung durch Rasensaat

Entwässerungsrinne, 1 Läuferzeile Betonsteinpflaster 16/24/14 cm, ohne Fase, Farbe grau,auf einem Betonbett C 30/37 gepl. Grünfläche mit Begrünung durch Rasensaat

I Problem: Wir haben eine elastische, reaktive Anwendung aber nicht genug Geld um eine unbegrenzt große Server Farm zu betreiben. I Lösung: Bei Überlastung sollten Anfragen nicht

I Reaktive Programmierung kann diese Fehlerquellen einhegen I Theoretische Grundlagen zur Modellierung nebenläufiger Systeme. I zur

I Functional Reactive Programming I Software Transactional Memory I Eventual Consistency I Robustheit und Entwurfsmuster I Theorie der Nebenläufigkeit, Abschluss. RP SS 2017

[r]

I Lösung: Neuer Aktor für jeden Response Kontext..

 Ressourcen stehen temporär nicht zur Verfügung.  Notwendigkeit