SlideShare a Scribd company logo
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

PDF
Visual Design with Data
PDF
Facts & Figures about Web3 Security in 2024
PPTX
PPT-CyberJourney-June-2023-Carboni.pptx
PDF
From Smart Contracts to NFT
PDF
Blockchain School 2019 - Security of Smart Contracts.pdf
PDF
The Bitcoin blockchain (en)
PDF
Internet-of-things, sicurezza, privacy, trust
PDF
Blockchain - crittomonete, Bitcoin e altre applicazioni
Visual Design with Data
Facts & Figures about Web3 Security in 2024
PPT-CyberJourney-June-2023-Carboni.pptx
From Smart Contracts to NFT
Blockchain School 2019 - Security of Smart Contracts.pdf
The Bitcoin blockchain (en)
Internet-of-things, sicurezza, privacy, trust
Blockchain - crittomonete, Bitcoin e altre applicazioni

More from Davide Carboni (15)

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

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)