SlideShare a Scribd company logo
1 of 13
Download to read offline
Commit a due fasi

               Davide Carboni
      Corso di Computazione su Rete
Laurea specialistica in Tecnologie Informatiche
         Facoltà Scienze MM.FF.NN
            Università di Cagliari
                AA 2007/2008
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
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)
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
Altre ipotesi
●   Nessun nodo se va in crash resta in crash
    all'infinito
    –   questa ipotesi è forte e non permette l'uso del
        protocollo se uno dei nodi ad esempio esplode
●   Due nodi possono sempre comunicare fra loro
    –   questa non è un'ipotesi molto forte nella
        commutazione a pacchetto
Request Phase
1. Il coordinatore spedisce un messaggio COMMIT-REQ ad ogni
   partecipante
2. 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
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
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
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.
Stati del coordinatore
request 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
Stati del partecipante
                 ready              riceve COMMIT-REQ non accettabile
                                                                        aborted

         riceve COMMIT-REQ valida
                                        riceve un ROLLBACK


agreed

                 riceve COMMIT


                                                   spedisce COMMITED
                              commiting                                 done
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
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 all'infinito (ma un crash infinito è
    contro l'ipotesi)

More Related Content

More from Davide Carboni

Internet of Things al Festivalscienza 2010
Internet of Things al Festivalscienza 2010Internet of Things al Festivalscienza 2010
Internet of Things al Festivalscienza 2010Davide Carboni
 
Pysense: wireless sensor computing in Python?
Pysense: wireless sensor computing in Python?Pysense: wireless sensor computing in Python?
Pysense: wireless sensor computing in Python?Davide Carboni
 
Introduzione ai Design Patterns nella Programmazione a Oggetti
Introduzione ai Design Patterns nella Programmazione a OggettiIntroduzione ai Design Patterns nella Programmazione a Oggetti
Introduzione ai Design Patterns nella Programmazione a OggettiDavide Carboni
 
The world is the computer and the programmer is you
The world is the computer and the programmer is youThe world is the computer and the programmer is you
The world is the computer and the programmer is youDavide Carboni
 
Browsing Large Collections of Geo-Tagged Pictures
Browsing Large Collections of Geo-Tagged PicturesBrowsing Large Collections of Geo-Tagged Pictures
Browsing Large Collections of Geo-Tagged PicturesDavide Carboni
 
Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Davide Carboni
 
Kickoff del Progetto Cluster Mashup e Geoweb
Kickoff del Progetto Cluster Mashup e GeowebKickoff del Progetto Cluster Mashup e Geoweb
Kickoff del Progetto Cluster Mashup e GeowebDavide Carboni
 
Open al bivio fra software e webware (al javaday 2006)
Open al bivio fra software e webware (al javaday 2006)Open al bivio fra software e webware (al javaday 2006)
Open al bivio fra software e webware (al javaday 2006)Davide Carboni
 
Web 2.0, mashup e GeoWeb
Web 2.0, mashup e GeoWebWeb 2.0, mashup e GeoWeb
Web 2.0, mashup e GeoWebDavide Carboni
 
Open al bivio fra software e webware
Open al bivio fra software e webwareOpen al bivio fra software e webware
Open al bivio fra software e webwareDavide Carboni
 

More from Davide Carboni (14)

04 bloom
04 bloom04 bloom
04 bloom
 
Internet of Things al Festivalscienza 2010
Internet of Things al Festivalscienza 2010Internet of Things al Festivalscienza 2010
Internet of Things al Festivalscienza 2010
 
Pysense: wireless sensor computing in Python?
Pysense: wireless sensor computing in Python?Pysense: wireless sensor computing in Python?
Pysense: wireless sensor computing in Python?
 
Introduzione ai Design Patterns nella Programmazione a Oggetti
Introduzione ai Design Patterns nella Programmazione a OggettiIntroduzione ai Design Patterns nella Programmazione a Oggetti
Introduzione ai Design Patterns nella Programmazione a Oggetti
 
The world is the computer and the programmer is you
The world is the computer and the programmer is youThe world is the computer and the programmer is you
The world is the computer and the programmer is you
 
Browsing Large Collections of Geo-Tagged Pictures
Browsing Large Collections of Geo-Tagged PicturesBrowsing Large Collections of Geo-Tagged Pictures
Browsing Large Collections of Geo-Tagged Pictures
 
Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)
 
NAT Traversal
NAT TraversalNAT Traversal
NAT Traversal
 
Introduction P2p
Introduction P2pIntroduction P2p
Introduction P2p
 
Spoleto07
Spoleto07Spoleto07
Spoleto07
 
Kickoff del Progetto Cluster Mashup e Geoweb
Kickoff del Progetto Cluster Mashup e GeowebKickoff del Progetto Cluster Mashup e Geoweb
Kickoff del Progetto Cluster Mashup e Geoweb
 
Open al bivio fra software e webware (al javaday 2006)
Open al bivio fra software e webware (al javaday 2006)Open al bivio fra software e webware (al javaday 2006)
Open al bivio fra software e webware (al javaday 2006)
 
Web 2.0, mashup e GeoWeb
Web 2.0, mashup e GeoWebWeb 2.0, mashup e GeoWeb
Web 2.0, mashup e GeoWeb
 
Open al bivio fra software e webware
Open al bivio fra software e webwareOpen al bivio fra software e webware
Open al bivio fra software e webware
 

2 phase-commit

  • 1. Commit a due fasi Davide Carboni Corso di Computazione su Rete Laurea specialistica in Tecnologie Informatiche Facoltà Scienze MM.FF.NN Università di Cagliari AA 2007/2008
  • 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. 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. 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. Altre ipotesi ● Nessun nodo se va in crash resta in crash all'infinito – questa ipotesi è forte e non permette l'uso del protocollo se uno dei nodi ad esempio esplode ● Due nodi possono sempre comunicare fra loro – questa non è un'ipotesi molto forte nella commutazione a pacchetto
  • 6. Request Phase 1. Il coordinatore spedisce un messaggio COMMIT-REQ ad ogni partecipante 2. 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. 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. 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. 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. Stati del coordinatore request 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. Stati del partecipante ready riceve COMMIT-REQ non accettabile aborted riceve COMMIT-REQ valida riceve un ROLLBACK agreed riceve COMMIT spedisce COMMITED commiting done
  • 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. 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 all'infinito (ma un crash infinito è contro l'ipotesi)