transazioni distribuite - Dipartimento di Ingegneria dell`Informazione

Transcript

transazioni distribuite - Dipartimento di Ingegneria dell`Informazione
TRANSAZIONI DISTRIBUITE
•
•
Transazioni distribuite
Atomicità di una transazione distribuita
•
Gestione dell’affidabilità
– Protocollo Two-Phase Commit
– Fallimenti durante il 2PC
•
Gestione della concorrenza
– Serializzabilità locale e globale
– Protocollo 2PL (Two-Phase Locking) distribuito
•
•
Situazioni di stallo
Riferimenti
[1] A.Albano “Costruire sistemi per basi di dati”, Addison Wesley, 2001
[4] P.Atzeni,S.Ceri,P.Fraternali,S.Paraboschi,R.Torlone “Basi di dati –
architetture e linee di evoluzione”, McGraw-Hill, 2003
[5] M.T.Ozsu,P.Valduriez “Principles of Distributed Database Systems”,
2nd edition, Prentice Hall, 1991
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
1
TRANSAZIONI
•
Una transazione è una unità elementare di lavoro svolta da una
applicazione; comandi di transazione:
– Start transaction / end transaction
– Commit / Rollback
•
•
Se una transazione esegue un rollback oppure viene uccisa dal
sistema si dice che la transazione va in abort
Proprietà acide di una transazione (ACID)
– Atomicity, atomicità: una transazione è una unità indivisibile di
esecuzione (tutta o niente, abort → undo)
– Consistency, consistenza: non devono essere violati i vincoli di
integrità della base di dati (verifica immediata o differita al momento
del commit, es. cicli nei vincoli di integrità referenziali)
– Isolation, isolamento: l’esito di una transazione è indipendente
dall’esecuzione concorrente di altre transazioni (2PL vs 2PL stretto)
– Durability, persistenza: le modifiche effettuate da una transazione
andata in commit devono essere permanenti (guasti → redo)
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
2
1
Caratteristiche delle transazioni distribuite
• Una transazione distribuita è composta da più
sottotransazioni eseguite in modo concorrente da
processi diversi
• In un DBMS distribuito le sottotransazioni vengono
eseguite su nodi diversi della rete
• Una transazione distribuita accede quindi a dati
allocati su nodi diversi
• La transazione distribuita deve comunque essere
“indivisibile”
– Le sottotransazioni devono essere opportunamente coordinate
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
3
Distributed Execution Monitor
• Nel sistema c’è un modulo che gestisce l’esecuzione delle
transazioni, in ambiente distribuito è chiamato Distributed
Execution Monitor
• Il DEM passa opportuni comandi al Data Processor che
invece ha la funzione di accedere ai dati
• All’interno del DEM possiamo individuare due
componenti
– Lo Scheduler che si occupa di “alternare” le operazioni delle varie
transazioni in esecuzione
– Il Transaction Manager che gestisce le transazioni, accetta i
comandi di transazione e fa in modo che vengano eseguiti
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
4
2
Modello del Distributed Execution Monitor
Begin_trans,
Risultati
Read, Write
Commit, Abort
Distributed Execution
Monitor
Transaction Manager
TM
Con altri SC
Con altri
Con altri
TM
data processor
Scheduler SC
verso data
processor
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
5
Operazioni e Transaction Manager
•
Begin_transaction
– Sta per cominciare una nuova transazione
– Il TM registra il nome della transazione, l’applicazione da cui ha origine, ..
•
Read
– Se il dato x è memorizzato localmente, il suo valore viene letto e restituito
– Altrimenti il TM sceglie una copia di x e chiede che venga restituita
•
Write
– Il TM coordina l’aggiornamento del valore di x in tutti i siti dove è
memorizzato
•
Commit
– Il TM coordina l’aggiornamento fisico di tutti i database che contengono
copie di tutti i dati che erano stati scritti
•
Abort
– Il TM fa in modo che le transazioni non abbiano effetto sul database
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
6
3
Classificazione delle transazioni (1)
•
•
Classificazione delle transazioni basata sulla natura dei comandi
SQL che le compongono
Richieste remote
– Transazioni di sola lettura verso un solo DBMS remoto (più comandi
SELECT verso un unico DBMS remoto)
•
Transazioni remote
– Transazioni costituite da più comandi (SELECT, INSERT, DELETE,
UPDATE) diretti ad un unico DBMS remoto
•
Transazioni distribuite
– Transazioni rivolte a più DBMS, ma un singolo comando SQL fa
riferimento ai dati di un solo DBMS
•
Richieste distribuite
– Transazioni arbitrarie, formate da più comandi SQL, e ciascuno di
essi può far riferimento a dati distribuiti su qualunque DBMS
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
7
Classificazione delle transazioni (2)
•
Questa classificazione fa riferimento alla nozione di trasparenza a
livello di linguaggio
– Ad esempio se abbiamo trasparenza a livello di frammentazione
(l’utente fa una query generica senza sapere se la relazione è
frammentata e l’eventuale allocazione dei frammenti) la query
risultante è classificabile come richiesta distribuita
•
La classificazione fa riferimento alle situazioni:
– Una transazione può solo leggere
– Una transazione può scrivere ma scrive su un solo DBMS
– Una transazione può scrivere su più nodi ma ogni comando, quindi
anche ogni scrittura, è indirizzato ad un solo DBMS: necessità di un
protocollo di commit a due fasi
– Una transazione può avere un comando (o più) che fa riferimento a
più nodi (es. join): necessità di un ottimizzatore delle interrogazioni
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
8
4
Esempio1 di transazione
•
Conto_corrente ( num_cc, nome, saldo) divisa in due frammenti
– Conto_corrente1
– Conto_corrente2
•
(num_cc <= 10000)
(num_cc > 10000)
Query che trasferisce 100 euro dal conto 3100 al conto 15000 con
trasparenza a livello di allocazione (l’utente è a conoscenza dei
frammenti ma non dei nodi su cui sono allocati)
Begin transaction
update Conto_corrente1
set saldo = saldo – 100
where num_cc = 3100;
update Conto_corrente2
set saldo = saldo + 100
where num_cc = 15000
End transaction
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
9
Esempio2 di transazione (1)
• Conto_corr (num, saldo) e
allocate in nodi diversi
• Transazione:
Conto_risp (num, saldo)
– sposta un ammontare da Conto_risp a Conto_corr
– viene eseguita come due processi diversi che si scambiano
messaggi
– la transazione inizia nel nodo dove si trova Conto_risp
– la transazione effettua alcune operazioni, poi attiva la
sottotransazione partecipante e le manda un messaggio
• Riferimento [1]
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
10
5
Esempio2 di transazione (2)
PROCESS Coordinatore;
VAR EXEC SQL BEGIN DECLARE SECTION
x_amm, amm, x_saldo: INTEGER;
numero, da_conto, a_conto: ARRAY [1…6] OF CHAR;
EXEC SQL END DECLARE SECTION
BEGIN TRANSACTION
WRITELN (‘Scrivi Ammontare, da quale conto, a quale conto’);
READ (amm, da_conto, a_conto);
EXEC SQL
SELECT saldo INTO :x_saldo FROM Conto_risp WHERE num = :da_conto
IF x_saldo < amm THEN
BEGIN WRITELN (‘saldo insufficiente’); ROLLBACK; END
ELSE BEGIN EXEC SQL
UPDATE Conto_risp SET saldo = :saldo - :amm WHERE num = :da_conto;
CREATE Partecipante;
SEND (amm, a_conto) TO Partecipante;
COMMIT;
END
END TRANSACTION; END Coordinatore
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
11
Esempio2 di transazione (3)
PROCESS Partecipante
VAR EXEC SQL BEGIN DECLARE SECTION
amm, x_saldo: INTEGER;
a_conto: ARRAY [1…6] OF CHAR;
EXEC SQL END DECLARE SECTION
BEGIN
RECEIVE ( amm, a_conto) FROM Coordinatore;
EXEC SQL
UPDATE Conto_corr SET saldo=saldo + :amm WHERE num = :a_conto;
IF SQLCODE = 0 THEN COMMIT ELSE ROLLBACK
END Partecipante
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
12
6
Atomicità di una transazione
•
•
•
•
•
Una transazione distribuita è composta da più sottotransazioni
eseguite su nodi diversi
Ogni sottotransazione può andare in commit o in abort
indipendentemente dalle altre
La transazione distribuita può andare in commit solo se tutte le
sottotransazioni terminano correttamente
Deve quindi essere seguito un protocollo particolare per arrivare
alla decisione di commit o abort per la transazione
Protocollo di commit a due fasi (Two-Phase Commit Protocol,
2PC)
– Tutti i server su cui sono eseguite le sottotransazioni sono detti
“partecipanti”; esiste un processo detto “coordinatore”
– Vengono scritti nuovi tipi di record nel log per rendere il protocollo
resistente ai guasti
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
13
2PC / Two-Phase Commit Protocol
•
Abbiamo un numero arbitrario di partecipanti e un coordinatore
– Partecipanti: RM, Resource Manager (sono le sottotransazioni)
– Coordinatore: TM, Transaction Manager
•
•
•
Un RM viene eseguito sotto il controllo del Transaction Manager
locale ed esegue quanto localmente necessario: scrittura sul Log di
Begin, Insert, …regola WAL (Write Ahead Log), commit
precedenza, …
Il TM spesso è eseguito sul nodo che ha attivato la transazione
Fase uno
– Vengono interrogate le sottotransazioni, raccolte le loro decisioni e
deciso un commit globale (se tutte hanno comunicato una
terminazione positiva) o un abort globale
•
Fase due
– La decisione globale viene comunicata alle sottotransazioni che
effettuano le relative operazioni
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
14
7
Protocollo 2PC - Log
•
•
TM e RM hanno ognuno un proprio Log
Record particolari scritti da TM nel suo Log
– PREPARE contiene l’identificativo dei processi RM (nodo e processo)
– GLOBAL COMMIT esprime la decisione atomica e persistente di
terminare con successo l’intera trasmissione
– GLOBAL ABORT
– COMPLETE viene scritto al termine del 2PC
•
Record particolari scritti da ogni RM nel suo Log
– READY contiene l’identificativo (nodo e processo) di TM, esprime la
volontà irrevocabile di partecipare al 2PC per contribuire ad un
commit
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
15
Protocollo 2PC in assenza di guasti
prima fase
•
TM
– Registra Prepare nel proprio Log
– Imposta un tempo massimo di attesa, timeout
– Invia un messaggio Prepare a tutti gli RM
•
RM
– Un RM in stato affidabile scrive Ready nel proprio Log e trasmette a
TM un messaggio di Ready (vote-Commit)
– Un RM non in stato affidabile (fallimento di transazione) invia un
messaggio di not-ready (vote-Abort) e termina il protocollo
•
TM
– Colleziona tutte le risposte
– Se riceve da tutti gli RM un messaggio di Ready scrive Global
Commit nel proprio Log
– Se non riceve tutte risposte positive, o se allo scadere del timeout non
ha ancora ricevuto risposta da tutti gli RM, scrive Global Abort sul
proprio Log
– Es. di risposta mancante: RM ha deciso autonomamente un abort
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
16
8
Protocollo 2PC in assenza di guasti
seconda fase
•
TM
– Trasmette la sua decisione agli RM
– Imposta un timeout
•
RM in stato ready
–
–
–
–
•
Riceve da TM la decisione globale
Scrive Commit o Abort sul proprio Log
Invia un messaggio di Ack (Acknowledge) al TM
L’ esecuzione del Commit o Abort procede localmente
TM
– Colleziona tutti gli Ack
– Se riceve tutti gli Ack scrive Complete nel proprio Log
– Se scatta il timeout senza aver ricevuto tutte le risposte, imposta un
nuovo timeout e ripete la trasmissione verso gli RM che non hanno
risposto, e così via finché non arrivano tutti gli Ack
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
17
Azioni del protocollo 2PC
coordinatore
partecipante
INITIAL
INITIAL
RE
PREPA
Write begin_commit
Write abort
BORT
VOTE-A
WAIT
no
si
VOTE-COMMIT
Any NO
?
si
Write ready
GLOBAL-
Write abort
ABORT
READY
OMMIT
GLOBAL-C
no
Write commit
ACK
Write abort
ABORT
COMMIT
abort
Type of msg?
commit
ACK
Write end_of_transaction
F.Cesarini - Basi Dati
Distribuite
Ready to
commit?
Write commit
ABORT
Transazioni distribuite
COMMIT
18
9
Struttura del 2PC centralizzato
coordinatore
partecipanti
PREPARE
coordinatore
coordinatore
VOTE-ABORT /
GLOBAL-ABORT /
ABORT /
VOTE-COMMIT
GLOBAL-COMMIT
COMMIT
Fase 1
F.Cesarini - Basi Dati
Distribuite
partecipanti
Fase 2
Transazioni distribuite
19
Protocollo 2PC - osservazioni
•
Assenza di comunicazione fra TM e RM
– Durante la prima fase: Abort globale
– Durante la seconda fase: ripetizione della trasmissione da parte di TM
•
Un RM ready perde la propria autonomia rispetto a TM e rimane
in attesa di quanto deciderà TM
– Intervallo di incertezza: intervallo fra la scrittura sul Log di Ready e
la scrittura di Commit o Abort
– Durante l’intervallo di incertezza i lock acquisiti permangono, non
vengono ancora rilasciati (se si ha un fallimento di TM o della rete si
deve aspettare il ripristino dal fallimento): protocollo “blocca nte”
•
Le prossime figure sono riprese da [4]
– Nella seconda viene visualizzato un client che lancia il processo
applicativo RM ( e poi altri… ) e ne attende la terminazione; una volta
che gli RM comunicano di aver terminato, lancia il 2PC interagendo
con il TM
– In questo modello è il client a coordinare un’esecuzione distribuita
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
20
10
Protocollo 2PC – finestra di incertezza
Prepare
Global decision
Complete
TM
prepare
msg
ready
msg
decision
msg
Ready
Local
decision
ack msg
RM
Finestra di incertezza
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
21
Protocollo 2PC nel contesto di una
transazione
CLIENT
2PC
exec
done
done
TM
Begin
Update Update
RM
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
22
11
Protocollo 2PC – guasti
caduta di un partecipante
•
•
•
Ricordiamo che la caduta di un partecipante comporta la perdita
dei buffer
Nel protocollo di ripresa a caldo, viene esaminato il Log
Se l’ultimo record scritto dal partecipante è
Una azione: le azioni devono essere disfatte
Abort: le azioni devono essere disfatte
Commit: le azioni devono essere rifatte
Se, in questi ultimi due casi, non è stato inviato ack, si noti che il TM
continua a ripetere la seconda fase finché non ottiene risposta (a
seguito del recovery di RM)
– Ready: l’esito globale è in dubbio; vengono chieste informazioni al
TM
–
–
–
–
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
23
Protocollo 2PC – guasti
caduta del coordinatore
•
Ultimo record nel Log: Prepare
– Il TM ripete la prima fase del protocollo (se gli RM sono ancora
pronti, si potrà avere un Commit)
•
Ultimo record nel Log: Global Decision
– Ad alcuni RM potrebbe non essere ancora stata comunicata la
decisione globale
– La seconda fase viene riiniziata inviando a tutti la decisione globale
•
Ultimo record nel Log: Complete
•
Motivi della ripetizione della seconda fase
– Il fallimento del TM non ha conseguenze sulla transazione
– È scaduto il timeout nel funzionamento normale
– Recovery di RM o TM
•
Ripetizione seconda fase: RM può ricevere più volte la stessa
decisione, questa può essere ignorata ma deve essere risposto ack
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
24
12
Protocollo 2PC - guasti
perdita di messaggi / partizionamento rete
•
Perdita di Prepare o di Ready ( o Not-ready)
– Scade il timeout senza risposta e si ha un Global Abort
•
Perdita di Decision o di Ack:
– Scade il timeout della seconda fase che viene ripetuta
•
Partizionamento della rete
– Per il TM è come se tutti i partecipanti sconnessi dalla sottorete cui
appartiene il coordinatore fossero falliti
– Per un RM sconnesso dalla sottorete cui appartiene il coordinatore è
come se fosse fallito il coordinatore
– La transazione avrà successo solo se TM e tutti gli RM appartengono
ad una sottorete
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
25
Concorrenza
•
•
•
•
Correttezza di una esecuzione concorrente distribuita: concetto di
serializzabilità
La serializzabilità locale delle varie sottotransazioni non garantisce
la serializzabilità delle transazioni globali
Esempio [4] – supponiamo di avere due transazioni T1 e T2 che
operano su due dati, x e y, allocati rispettivamente nei nodi 1 e 2.
Indichiamo con S1 e S2 le storie locali
T1 :
T2 :
r11(x) w11(x) r12(y) w12(y)
r22(y) w22(y) r21(x) w21(y)
S1 :
S2 :
r11(x) w11(x) r21(x) w21(x)
r22(y) w22(y) r12(y) w12(y)
S1 e S2 sono localmente serializzabili (sono seriali), ma nel grafo
dei conflitti globale c’è un ciclo:
– Nodo 1: T1 precede ed è in conflitto con T2
– Nodo 2: T2 precede ed è in conflitto con T1
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
26
13
Serializzatore distribuito
•
•
Ambiente distribuito: metodi che sono una generalizzazione di
quelli utilizzabili sui sistemi centralizzati
Serializzatore distribuito:
– Ogni sistema locale ha il proprio serializzatore che garantisce la
serializzabilità della storia locale
– I serializzatori locali cooperano tra loro scambiandosi messaggi in
modo da ottenere una storia globale serializzabile
•
•
Consideriamo una generalizzazione del protocollo 2PL (TwoPhase Locking)
Protocollo 2PL
– I dati vengono bloccati e rilasciati con primitive di tipo lock/unlock
– Dopo un unlock non possono più essere effettuati lock
•
Protocollo 2PL stretto (garantisce l’isolamento )
– Gli unlock vengono effettuati tutti insieme al momento del Commit
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
27
Protocollo 2PL distribuito
•
Ogni scheduler esegue localmente un 2PL stretto
– Quando viene ricevuta una richiesta di blocco per un dato x, viene
controllato se il dato è già bloccato, ed eventualmente la transazione
viene sospesa
•
•
Viene seguito un protocollo 2PC per il Commit globale
La sottotransazione rilascia tutti i suoi blocchi quando riceve dal
coordinatore il messaggio abort o commit
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
28
14
Situazioni di stallo
•
•
•
•
Il protocollo 2PL può portare a situazioni di stallo
Una situazione di stallo globale (su più nodi) può verificarsi anche
in assenza di stalli locali
Esempio [1] - x, y siano dati memorizzati in N1 e N2
T1: r1(x) w1(y) c1
inizia nel nodo N1
T2: r2(y) w2(x) c2
inizia nel nodo N2
Si consideri la storia seguente
– N1: il serializzatore riceve r1(x) e assegna il lock rl1(x)
– N2: il serializzatore riceve r2(y) e assegna il lock rl2(y)
– N1: il ser. riceve w2(x), mette T2 in attesa, aggiunge T2 → T1 al
proprio grafo di attesa
– N2: il ser. riceve w1(y), mette T1 in attesa, aggiunge T1 → T2 al
proprio grafo di attesa
•
Si ha un ciclo nel grafo di attesa globale
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
29
Rilevazione delle situazioni di stallo
•
•
Uso di timeout
Rilevazione centralizzata: costruzione del grafo di attesa globale
da parte di un “controllore” [1] [5]
– Su un nodo particolare è attivato il controllore (rilevatore globale)
– I serializzatori locali comunicano via via al controllore le modifiche al
grafo di attesa locale
– Periodicamente il controllore effettua l’unione dei grafi locali, se
rileva un ciclo sceglie la transazione da interrompere
– “stallo fantasma”: una situazione di stallo che appare nel grafo
globale, ma dovuta a ritardi nella trasmissione di modifiche del grafo
locale
– Proposto per INGRES distribuito
•
Algoritmo IBM DB2 distribuito: cfr. [3]
F.Cesarini - Basi Dati
Distribuite
Transazioni distribuite
30
15

Documenti analoghi

Basi di dati e Web introduzione

Basi di dati e Web introduzione update CONTO set saldo where filiale = update CONTO set saldo where filiale = commit work; end transaction; Basi di dati - 2012/2013

Dettagli

Tecnologia di un Database Server - Dipartimento di Matematica e

Tecnologia di un Database Server - Dipartimento di Matematica e Atomicità. Una transazione è un’unità indivisibile di esecuzione: o produce tutti i suoi effetti o non ne produce alcuno (tutto o niente). Se durante l’esecuzione delle istruzioni che compongono...

Dettagli

Le transazioni

Le transazioni I due update devono essere considerati come un comando unico. Ciò si realizza attraverso il concetto di transazione

Dettagli

Transazioni

Transazioni Definizione di transazione  Transazione  parte di programma caratterizzata da un inizio (begin-transaction, start transaction in SQL), una fine (end-transaction, non esplicitata in SQL) e al cui...

Dettagli