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

Post on 06-Apr-2015

105 views 0 download

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

Transaktionale SystemeProjektteil 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

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

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

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

Beispiel: queryFlight() I

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

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

3] wc.commit(xid) ;

Beispiel: queryFlight() II

Client 1

Flights Hotels Cars Customers

RM RMRMRM

WorkflowController

Transaction Manager

start()

start()

Beispiel: queryFlight() III

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

ControllerTransaction Manager

queryFlight()

queryFlight() enlist()

Beispiel: queryFlight() IV

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

ControllerTransaction Manager

commit()

commit()

prepare()

commit()

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

Beispiel : addFlight() II

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

start()

start()

Beispiel : addFlight() III

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

queryFlight()

queryFlight() enlist()

Beispiel : addFlight() IV

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addFlight()

addFlight()

Beispiel : addFlight() V

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

commit()

commit()

prepare()

commit()

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

Beispiel : Verteilte TA II

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

start()

start()

Beispiel : Verteilte TA III

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addCars()

addCars()enlist()

Beispiel : Verteilte TA IV

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addRooms()

addRooms() enlist()

Beispiel : Verteilte TA V

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

commit()

commit()

prepare()

commit()

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

Beispiel : Ausfall Knoten II

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

start()

start()

Beispiel : Ausfall Knoten III

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addCars()

addCars()enlist()

Beispiel : Ausfall Knoten IV

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

addRooms()

addRooms() enlist()

Beispiel : Ausfall Knoten V

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

Beispiel : Ausfall Knoten VI

Client 1

Flights Hotels Cars Customers

RM RMRMRM

Workflow

Controller

Transaction Manager

commit()

commit()

prepare()

abort()

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

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.

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