Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager
Teil II Organisation Abgabe des zweiten Teils am 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 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 Workflow Controller Transaction Manager start()
Beispiel: queryFlight() III Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager queryFlight() enlist()
Beispiel: queryFlight() IV Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager 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 Workflow Controller Transaction Manager start()
Beispiel : addFlight() III Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager queryFlight() enlist()
Beispiel : addFlight() IV Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager addFlight()
Beispiel : addFlight() V Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager 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 Workflow Controller Transaction Manager start()
Beispiel : Verteilte TA III Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager addCars() enlist()
Beispiel : Verteilte TA IV Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager addRooms() enlist()
Beispiel : Verteilte TA V Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager 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 Workflow Controller Transaction Manager start()
Beispiel : Ausfall Knoten III Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager addCars() enlist()
Beispiel : Ausfall Knoten IV Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager addRooms() enlist()
Beispiel : Ausfall Knoten V Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager
Beispiel : Ausfall Knoten VI Client 1 Flights Hotels Cars Customers RM Workflow Controller Transaction Manager commit() prepare() abort()
ToDos 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()