Sunteți pe pagina 1din 15

Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Fundamentele sistemelor distribuite

Atomicitatea tranzacţiilor

Mitică Craus

Univeristatea Tehnică ”Gheorghe Asachi” din Ias, i

1/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Cuprins

Introducere
Proprietăţile unei tranzacţii
Programarea tranzacţiilor
Tranzacţii distribuite
Algoritmul Two-Phase Commit
Pseudocod
Tipuri de erori posibile
Soluţii de rezolvare a erorilor
Bibliografie

2/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Introducere

• Tranzact, ia este o secvent, ă de operat, ii care realizează o actiune indivizibilă (o funct, ie


logică).
• Exemple:
• Extragerea de bani de la un bancomat;
• Cumpărarea unui produs de la un automat de cafea;
• Rezervarea unui bilet la avion;
• Inregistrarea online la un curs sau conferinţă.
• Nu sunt admise rezultate parţiale.
• Exemple:
• Automatul de cafea preia banii şi prepară cafeaua solicitată, după care o pune la
dispoziţia clientului. Nici una din operaţii nu poate lipsi, iar ordinea trebuie respectată.
• Inregistrarea online la un curs nu se termină dacă nu sunt completate toate câmpurile
obligatorii şi nu este transmis formularul completat.

3/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Proprietăţile unei tranzacţii

• Atomicitatea: Din exterior, tranzact, ia este văzută ca o act, iune indivizibilă.


• Consistenţa: Tranzact, iile nu alterează elementele stabile (invariante) ale sistemului.
• Izolarea: Tranzact, iile nu interact, ionează ı̂ntre ele; o tranzact, ie nu poate cont, ine
operat, ii comune cu altă tranzact, ie.
• Persistenţa (durabilitatea): După terminarea tranzact, iei, schimbarile rămân
permanente.

4/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Programarea tranzacţiilor

• Tranzact, iile sunt programate ca thread-uri sau procese. Aceasta asigură izolarea
instant, elor tranzact, iilor.
• Întreruperea unei tranzacţii trebuie să fie urmată de restabilirea stării anterioare
startului tranzacţiei.
• O tranzact, ie poate include alte tranzact, ii, dar două tranzact, ii nu pot fi imbricate.
• Exemplu:
• Cos, ul de cumpărături online cont, ine mai multe articole.
• Fiecare articole este obiectul unei tranzact, ii.
• Cos, ul este la rândul său prelucrat printr-o tranzact, ie.
• Tehnici de implementare:
• Utilizarea unor instrumente de memorare sigură, durabilă şi stabilă;
• Fişiere ”log”: aici sunt ı̂nregistrate act, iunile ı̂nainte de a fi realizate (”comitting”).
• Definirea, implementarea şi utilizarea unor protocoale de sincronizare.

5/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Tranzacţii distribuite

• Tranzacţii efectuate ı̂ntr-un sistem distribuit.


• Proprietăţile sunt aceleaşi: atomicitatea, consistenţa, izolarea, persistenţa.
• Defectările pot fi mai complexe:
• Se defectează o componentă sau un grup de componente computaţionale.
• Se defectează un canal sau un grup de canale de comunicare.
• Defecţiunile pot fi bizantine.

6/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Algoritmul Two-Phase Commit - pseudocod


Premise:
• Unitatea pi desemnată drept coordonator, ı̂n urma unui proces de select, ie (alegerea
liderului).
• Unitatea pi dispune de un fis, ier log plasat de un suport de memorare sigur, durabil şi stabil

Pseudocod pentru unitatea de procesare cu statut de coordonator


Two Phase Commit AT(pi )
1 / ∗ Phase I ∗ /
2 Place Prepare(T ) state in log on stable storage
3 Send Vote request(T ) message to all other participants
4 Wait for replies
5 / ∗ Phase II ∗ /
6 if any participant replies Abort(T )
7 then
8 Place Abort(T ) state in log on stable storage
9 Send Global Abort(T ) message to all participants
10 Locally abort transaction T
11 if all participants reply Ready to commit(T )
12 then
13 Place Commit(T ) state in log on stable storage
14 Send Global Commit(T ) message to all participants
15 Proceed to commit transaction locally

7/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Algoritmul Two-Phase Commit - pseudocod

Premise:
• Unitatea pj , j ∈ {0, 1, . . . , n − 1}, j 6= i, participă la efectuarea tranzacţiei, după ce a
participat la alegerea coordonatorului.
• Unitatea pj dispune de un fis, ier log local.

Pseudocod pentru unitatea de procesare cu statut de participant


Two Phase Commit AT(pj )
1 / ∗ Phase I ∗ /
2 gets Vote Request(T ) from coordinator
3 Place Abort(T ) or Ready (T ) state in local log
4 Reply with Abort(T ) or Ready to commit(T ) message to coordinator
5 if Abort(T ) state)
6 then Locally abort transaction T
7 / ∗ Phase II ∗ /
8 Wait for Global Abort(T ) or Global Commit(T ) message from coordinator
9 Place Abort(T ) or Commit(T ) state in local log
10 Abort or commit locally per message

8/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Tipuri de erori posibile

• La coordonator:
• defectarea sa;
• blocare ı̂n stare de aşteptare (Wait state): există cel puţin un participant care nu
răspunde la Vote Request(T ).
• La participant:
• defectarea sa;
• blocare ı̂n stare ”gata de execuţie a tranzacţiei” (Ready state): nu primeşte nici unul
din mesajele Global Abort(T ) sau Global Commit(T ).

9/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Coordonatorul se defectează - soluţia 1

Two Phase Commit Crash 1(pi )


1 Inspect log
2 if Abort or Commit state
3 then Resend corresponding message
4 Take corresponding local action
5 if Prepare state or nothing in log
6 then put Abort(T ) in own log on stable store
7 Send Global Abort(T ) message to all participant

10/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Coordonatorul se defectează - soluţia 2

Two Phase Commit Crash 2(pi )


1 Inspect log
2 if Abort or Commit state
3 then Resend corresponding message
4 Take corresponding local action
5 if Prepare state
6 then Resend Vote request(T ) to all other participants
7 Wait for their responses
8 if nothing in log
9 then put Abort(T ) in own log on stable store
10 Send Global Abort(T ) message to all participant

11/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Coordonatorul este blocat ı̂n starea de aşteptare

Two Phase Commit Wait Lock(pi )


1 Place Abort(T ) state in log on stable storage
2 Send Global Abort(T ) message to all participants
3 Locally abort transaction T

12/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Participantul se defectează

Two Phase Commit Crash(pj )


1 Inspect log
2 if Commit state
3 then Redo the transaction
4 if Ready state
5 then Two Phase Commit Ready Lock(pj )
6 if Abort state or nothing in log about T
7 then Locally abort the transaction

13/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Participantul este blocat ı̂n starea ”gata de execuţie a tranzacţiei”

Two Phase Commit Ready Lock(pj )


1 Re-contact coordinator, ask what to do
2 if unable to contact coordinator
3 then contact other participants, ask if they know
4 if any other participant is in Abort or Commit state
5 then Take equivalent action
6 else wait for coordinator to restart
7 / ∗ Participants are blocked, unable to go forward or back ∗ /

14/ 15
Introducere Tranzacţii distribuite Algoritmul Two-Phase Commit Bibliografie

Bibliografie

• A. Tanenbaum, M. Van Steen, Distributed Systems: Principles and Paradigms,


Second Edition, Prentice Hall, 2007
• Distributed Computing Systems, CS 4513, Worcester Polytechnic Institute

15/ 15

S-ar putea să vă placă și