2 phase-commit

1,211 views

Published on

Published in: Travel, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,211
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2 phase-commit

  1. 1. Commit a due fasi Davide Carboni Corso di Computazione su ReteLaurea specialistica in Tecnologie Informatiche Facoltà Scienze MM.FF.NN Università di Cagliari AA 2007/2008
  2. 2. A cosa serve● Il protocollo del commit a 2 fasi è un algoritmo distribuito che impegna più attori a compiere una transazione● I risultati possibili sono due: – o tutti gli attori partecipano alla transazione o nessuno di loro e in questo caso la transazione fallisce
  3. 3. Le due fasi● Nella prima fase il coordinatore della transazione contatta tutti i partecipanti richiedendo la transazione● Nella seconda fase la transazione viene completata● Una transazione è più di un semplice scambio di dati, essa produce un trasferimento di una qualche risorsa non clonabile (esempio denaro)
  4. 4. Ipotesi di funzionamento● Esiste un nodo detto coordinatore● Esistono N nodi partecipanti detti anche COHORT● Ogni nodo è in grado di mantenere una memoria di massa (es. un DB)● Ogni nodo tiene un log di ciò che scrive nella memoria di massa
  5. 5. Altre ipotesi● Nessun nodo se va in crash resta in crash allinfinito – questa ipotesi è forte e non permette luso del protocollo se uno dei nodi ad esempio esplode● Due nodi possono sempre comunicare fra loro – questa non è unipotesi molto forte nella commutazione a pacchetto
  6. 6. Request Phase1. Il coordinatore spedisce un messaggio COMMIT-REQ ad ogni partecipante2. Il coordinatore attende che tutti i partecipanti rispondano A)se uno solo dei partecipanti risponde ABORT allora la transazione fallisce e si procede allo step 5 B)se tutti i partecipanti rispondono AGREED la transazione può andare avanti e si procede allo step 3 C)se dopo un certo tempo T non tutti hanno risposto allora il coordinatore può spedire ROLLBACK a tutti oppure COMMIT-REQ a quelli che devono ancora rispondere
  7. 7. Commit Phase● 3. Registra nel Log un messaggio COMPLETE che indica che la transazione procede e spedisce ai partecipanti il messaggio COMMIT● 4. Attende che ogni partecipante risponda, se dopo un certo intervallo qualcuno non ha risposto ritrasmette COMMIT a questi. Quando tutte le risposte arrivano la transazione è conclusa.● 5. Spedisce ROLLBACK a tutti i partecipanti e la transazione fallisce e i valori precedenti vengono ripristinati da tutti i partecipanti grazie ai log
  8. 8. Protocollo partecipante● 1. Se riceve dal coordinatore una COMMIT- REQ per una transazione t allora... – se t è sconosciuta o non valida per il partecipante risponde con ABORT – se t è approvata dal partecipante vengono messe nel log le operazioni corrispondenti e risponde al coordinatore con AGREED
  9. 9. Protocollo Partecipante● 2. Se riceve ROLLBACK allora rimuove lo stato di t dai log UNDO e REDO ripristinando i precedenti valori● 3. Se riceve COMMIT il database viene aggiornato con il nuovo valore e la transazione rilascia i lock. Se la transazione è già commited non viene fatto nulla. Risponde COMMITED in risposta.
  10. 10. Stati del coordinatorerequest phase query commit phase spedisce COMMIT-REQ wait prepared riceve tutti gli AGREED riceve un ABORT spedisce COMMIT commiting riceve tutti i COMMITED aborted done
  11. 11. Stati del partecipante ready riceve COMMIT-REQ non accettabile aborted riceve COMMIT-REQ valida riceve un ROLLBACKagreed riceve COMMIT spedisce COMMITED commiting done
  12. 12. Enunciato di Correttezza● En. 1: se uno dei partecipanti completa la transazione allora tutti la completano● Dim.: se un partecipante ha completato la transazione allora il coordinatore è nella fase di commit quindi tutti i partecipanti hanno già preparato la transazione. Un crash a questo punto è ininfluente perchè i dati sono nella memoria permanente
  13. 13. Svantaggi● Il protocollo a due fasi è un protocollo bloccante: un nodo resta bloccato finche non arriva un messaggio.● Un nodo resta in attesa del commit anche se tutti gli altri nodi hanno fallito, se il coordinatore va in crash per sempre alcuni nodi possono restare bloccati allinfinito (ma un crash infinito è contro lipotesi)

×