Upload
merten-georgen
View
106
Download
0
Embed Size (px)
Citation preview
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()