28
Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Embed Size (px)

Citation preview

Page 1: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Transaktionale SystemeProjektteil B

Verteilte Transaktionen,Workflow- und

Transaktions-Manager

Page 2: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Teil II Organisation

Abgabe des zweiten Teils am 21.06.2007

Bearbeitung in denselben Gruppen wie Teil A

API und Codegerüst nachher im Netz

Page 3: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

VDB Projekt Teil II

Implementierung eines Workflow Controllers und eines Transaktionsmanagers

Client 1 Client 2 Client n

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

Page 4: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Verteilte Transaktionen

Fehlermodell

1. Knoten können ausfallen

2. Kommunikation zwischen Knoten zuverlässig Keine Replikation von Daten

1. Jeder Resource Manager kontrolliert eine Relation Verteiltes Commit Protokoll

1. Zentrales Zwei Phasen Commit Protokoll (2PC)

2. Einfache Termination- und Restartprotokolle

Page 5: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Verteilte Transaktionen

Workflow Controller

1. Zentrales Frontend für Clients.

2. Leitet Anfragen der Clients entweder zum

entsprechenden Resource Manager oder zum

Transaktionsmanager weiter. Resource Manager

Teilnehmer im 2PC Protokoll Transaktionsmanager

Koordinator im zentralen 2PC

Page 6: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel: queryFlight() I

• Example #1: 1] xid = wc.start() ;

2] seatsAvailable = wc.queryFlight(xid, “347”);

3] wc.commit(xid) ;

Page 7: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel: queryFlight() II

Client 1

Flights Hotels Cars Customers

RM RMRMRM

WorkflowController

Transaction Manager

start()

start()

Page 8: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel: queryFlight() III

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

ControllerTransaction Manager

queryFlight()

queryFlight() enlist()

Page 9: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel: queryFlight() IV

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

ControllerTransaction Manager

commit()

commit()

prepare()

commit()

Page 10: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : addFlight() I

• Example #2: 1] xid = wc.start() ;

2] seatsAvailable = wc.queryFlight(xid, “347”);

3] if (seatsAvailable = 0)

wc.addFlight(xid, “347”, 10, 500);

4] wc.commit(xid) ;

Page 11: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : addFlight() II

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

start()

start()

Page 12: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : addFlight() III

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

queryFlight()

queryFlight() enlist()

Page 13: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : addFlight() IV

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addFlight()

addFlight()

Page 14: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : addFlight() V

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

commit()

commit()

prepare()

commit()

Page 15: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Verteilte TA I

• Example #3: 1] xid = wc.start() ;

2] addCars(xid, “pa-hertz”, 10, 30) ;

3] addRooms(xid, “pa-sheraton”, 20, 100) ;

4] wc.commit(xid) ;

Page 16: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Verteilte TA II

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

start()

start()

Page 17: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Verteilte TA III

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addCars()

addCars()enlist()

Page 18: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Verteilte TA IV

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addRooms()

addRooms() enlist()

Page 19: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Verteilte TA V

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

commit()

commit()

prepare()

commit()

Page 20: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Ausfall Knoten I

• Example #4: 1] xid = wc.start() ;

2] addCars(xid, “pa-hertz”, 10, 30) ;

3] addRooms(xid, “pa-sheraton”, 20, 100) ;

4] wc.commit(xid) ;

Page 21: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Ausfall Knoten II

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

start()

start()

Page 22: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Ausfall Knoten III

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addCars()

addCars()enlist()

Page 23: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Ausfall Knoten IV

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addRooms()

addRooms() enlist()

Page 24: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Ausfall Knoten V

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

Page 25: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Beispiel : Ausfall Knoten VI

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

commit()

commit()

prepare()

abort()

Page 26: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

ToDo‘s

• Workflow Controller Interface– Frontend für Clients, NICHT modifizieren !

• Transaktionsmanager– Interface MUSS modifiziert werden !

• Resource Manager– Interface MUSS modifiziert werden !

• Fehlertoleranz– TM stirbt bevor “commit” für eine TA gespeichert– Ein RM stirbt bevor er ein “prepared” senden kann– Recovery von Fehlern beim TM und RM

Page 27: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Workflow Controller

Gleiches Interface wie ResourceManager zuzüglich: boolean reserveItinerary(

int xid, String custName, List flightNumList, String location, boolean needCar, boolean needRoom)

Weitere Methoden zum Testen z.B. dieRMBeforePrepare() etc.

Page 28: Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager

Transaktionsmanager

Der Transaktionsmanager koordiniert Transaktionen, an denen mehrere Resource Manager beteiligt sind.

Der Workflow Controller reicht, abort(), start(), commit() Aufrufe der Clients direkt an den Transaktionsmanager weiter.

Resource Manager benutzen die enlist() Methode, um ihre Teilnahme an einer Transaktion dem Transaktionsmanager bekannt zu machen.

• Interface des Transaktionsmanager (ist im Codegerüst nicht vorgegeben) :

start()commit()abort()enlist()