GESTION DE TRANSACTIONS CONCURRENTES
Download
Report
Transcript GESTION DE TRANSACTIONS CONCURRENTES
Gestion des transactions
1. Le mode transactionnel
2. Les accès concurrents
3.Gestion de transactions
2.1 Objectifs
2.2 Les bases
2.3 Le verrouillage à deux phases
2.4 L'ordonnancement par estampilles
2.5 Techniques avancées et modèles étendues
3.1. Journaux et reprise
3.2. Scénarios de reprise
3.3. Journalisation et modèles étendus
3.4. Cas des systèmes répartis
4. Moniteurs transactionnels
‹#›
D'après G. Gardarin
1. Le mode transactionnel (OLTP)
Opérations typiques
Mises à jour ponctuelles de tuples à partir de vues
prédéfinies, souvent répétitive, sur les données les plus
récentes
Exemple
Benchmark TPC-A et TPC-B : débit / crédit sur une base de
données bancaire
TPC-A benchmark en mode transactionnel,
TPC-B benchmark en mode traitement par lot.
Mesure le nombre de transactions par seconde (tps) et le
coût par tps.
‹#›
D'après G. Gardarin
La base des modes TPC-A/TPC-B
1
100000
Agences
Caissiers
Comptes
Historique
100
Taille pour 10 terminaux, avec règle d'échelle ( scaling rule)
‹#›
D'après G. Gardarin
La transaction débit - crédit
Begin-Transaction
Update Account Set Balance = Balance + Delta
// Montant Delta
Where AccountId = Aid ;
Insert into History (Aid, Tid, Bid, Delta, TimeStamp)
Update Teller Set Balance = Balance + Delta
Where TellerId = Tid ;
Update Branch Set Balance = Balance + Delta
Where TellerId = Tid ;
End-Transaction.
Objectif : temps de réponse de 90 % des transactions < 2 s
Chaque terminal génère une transaction toute les 10s
Performance = Nombre de transactions commises /Temps exécution moyen
Temps exécution moyen =Ellapse time
‹#›
D'après G. Gardarin
Cohabitation avec le mode décisionnel
Les transactions doivent souvent cohabiter avec des
requêtes décisionnelles, et traiter un grand nombre de
tuples en lecture.
Exemple :
Moyenne des avoirs des comptes par agence
SELECT B.BranchId, AVG(C.Balance)
FROM Branch B, Account C
WHERE B.BranchId = C.BranchId
GROUP BY B.BranchId ;
‹#›
D'après G. Gardarin
Les risques de disfonctionnement
Problèmes de la gestion des accès concurrents
Pertes d'opérations.
Introduction d'incohérences.
Verrous mortels (deadlock).
Panne de transaction
Erreur en cours d'exécution du programme applicatif.
Nécessité de défaire les mises à jour effectuées quand elles conduisent à
des incohérences.
Panne système
Reprise avec perte du contenu de la mémoire centrale : toutes les
transactions en cours doivent être défaites.
Panne disque
Perte de la base, d'où sauvegardes!
‹#›
D'après G. Gardarin
Propriétés fondamentales des transactions
Transaction
Séquence d'opérations liées comportant des mises à jour ponctuelles
d'une base de données devant vérifier les propriétés ACID.
Atomicité
Unité de cohérence : toutes les mises à jour doivent être effectuées ou
aucune.
Cohérence
La transaction doit faire évoluer la base de donnée d'un état cohérent à
un autre.
Isolation
Les résultats d'une transaction ne sont visibles aux autres transactions
qu'une fois la transaction validée.
Durabilité
Les modifications d'une transaction validée ne seront jamais perdue
‹#›
D'après G. Gardarin
Opérations Commit et Abort
Introduction d'actions atomiques
Commit (terminaison avec succès) et Abort (terminaison
avec échec).
Ces actions s'effectuent en fin de transaction.
Commit
Validation de la transaction.
Rend effectives toutes les mises à jour de la transaction.
Abort
Annulation de la transaction.
Défait toutes les mises à jour de la transaction.
‹#›
D'après G. Gardarin
Schéma d'une transaction simple
Fin avec succès ou échec
Begin_Transaction
update
update
.....
Commit ou Abort
- Provoque l'intégration réelle des mises
à jour dans la base
- Relâche les verrous
- Provoque l'annulation des mises à jour
- Relâche les verrous
- Reprend la transaction
‹#›
D'après G. Gardarin
Effet logique
Mémoire de la
transaction
Update
Update
Commit
Bases de données
‹#›
Abort
Poubelle
D'après G. Gardarin
Interface applicative
API pour transaction simple
Trid Begin (context*)
Commit ()
Abort()
Possibilité de points de sauvegarde :
Savepoint Save()
Rollback (savepoint) // savepoint = 0 ==> Abort
Quelques interfaces supplémentaires
ChainWork (context*) // Commit + Begin
Trid Mytrid()
Status(Trid) // Active, Aborting, Committing, Aborted,
Committed
‹#›
D'après G. Gardarin
2. Les accès concurrents
‹#›
2.1 Objectifs
2.2 Les bases
2.3 Le verrouillage à deux phases
2.4 L'ordonnancement par estampilles
2.5 Les applications avancées
D'après G. Gardarin
2.1 Objectifs
Permettre l'exécution simultanée d'un nombre important
de transactions.
Régler les conflits d'accès lecture (accès partagé)/ écriture
(accès exclusif).
Conserver de bonnes performances.
Eviter les inter-blocages.
‹#›
D'après G. Gardarin
Les problèmes des accès concurrents
Perte d'une mise à jour effectuée par une autre transaction
{ T1 : Lire A->a;
T1: a*2 ->a;
T1: Écrire a -> A
}
T2 : Lire A->b;
T2 : b+1 -> b;
T2 : Écrire b->A;
Introduction d'incohérences dans la base
A = B // contrainte d'intégrité
{ T1 : A*2->A;
T2 : A+1->A;
T2 : B+1 -> B;
T1 : B*2 -> B
}
‹#›
D'après G. Gardarin
Les problèmes des accès concurrents
Non reproductibilité de certaines lectures
{ T1 : Lire A->a;
T1: Lire A -> a
}
‹#›
T2 : Lire A->b;
T2 : b+1 -> b;
T2 : Écrire b->A;
D'après G. Gardarin
2.2 Les définitions de base
Granule de concurrence
Unité de données dont les
individuellement par le SGBD.
accès
sont
contrôlés
Action
Unité indivisible exécutée par le SGBD sur un granule pour
un utilisateur, constituée généralement par une opération de
lecture ou d'écriture.
Exécution de transaction
Séquence d'actions obtenues en intercalant les diverses
actions des transactions T1,T2,…,Tn tout en respectant
l'ordre interne de chaque transaction.
‹#›
D'après G. Gardarin
2.2 Les définitions de base (suite)
Chaque transaction Ti est composée d'une séquence
d'actions <a11, a12, ..., a1n>.
Une exécution simultanée (histoire) des transactions
{T1, T2, .... Tn} est une séquence d'actions
H = < ai1j1, ai2j2 .... aikjk > telle que aij < aij+1 pour tout i et
tout j et quel que soit aij de T1,…, Tn, aij est dans H
C'est une séquence d'actions complète respectant l'ordre des
actions des transactions.
Une exécution est sérielle si toutes les actions des
transactions ne sont pas entrelacées.
Elle est de la forme
<Tp(1), Tp(2), ...Tp(n)> ou p est une permutation de 1, 2, ... n.
‹#›
D'après G. Gardarin
Sérialisabilité
Exécution sérialisable
Une exécution est dite sérialisable si elle est équivalente à
une exécution sérielle.
Plusieurs critères d'équivalence possibles
Équivalence de vue : tous les résultats visibles sont
identiques.
Équivalence de conflit : toutes les actions conflictuelles sont
effectuées dans le même ordre sur les objets de la base.
‹#›
D'après G. Gardarin
Graphe de précédence
Précédence : propriété stipulant qu'une transaction a accompli
une opération Oi sur une donnée avant qu'une autre transaction
Oj n'y accomplisse une opération, les transactions Oi et Oj étant
non commutatives.
La technique est basée sur la seule sémantique des opérations
de lecture / écriture
"Ti lit l'objet O" avant "Tj écrit l'objet O" => Ti précède Tj
"Ti écrit l'objet O" avant "Tj écrit l'objet O" => Ti précède Tj
Condition de sérialisabilité
Le graphe de précédence doit rester sans cycle.
La sérialisabilité est une condition suffisante de correction.
Exercice
Démontrer que les cas de perte d'opérations et d'incohérences sont non
sérialisables.
‹#›
D'après G. Gardarin
2.3 Le Verrouillage à deux phases
Verrouillage à deux phases (Two Phases Locking)
Technique de contrôle des accès concurrents consistant à verrouiller les
objets au fur et à mesure des accès par une transaction et à relâcher les
verrous seulement après obtention de tous les verrous demandés.
Principes
Verrouillage des objets en lecture/écriture.
Opérations de verrouillage Lock(g,M) et de déverrouillage Unlock(g)
Compatibilité des opérations de lecture/écriture.
L
E
L : Lecture
L V
F
E : Ecriture
E
F
F
Toute nouvelle transaction doit attendre la fin des transactions
incompatibles.
La théorie garantit un graphe de précédence sans cycle.
Rappelons que l'existence d'un cycle peut créer un verrou mortel.
‹#›
D'après G. Gardarin
Condition de corrections
Transactions à deux phases (Two phases Commit)
Principe de base : une transaction ne peut relâcher un
verrou avant de les avoir tous acquis.
Nombre
de verrous
temps
j
‹#›
D'après G. Gardarin
Algorithmes de l'opération Lock
Bool Function Lock(Transaction t, Objet O, Mode M)
{Cverrou := 0 ;
Pour chaque transaction i t ayant verrouillé l'objet O faire
{Verrou := Verrou t.verrou(O) } ; // cumul des verrous sur l'objet
si Compatible (Mode, Verrou) alors
{t.verrou(O) = t.verrou(O) M; // marquer l'objet verrouillé
Lock := true ;
}
sinon {insérer (t, Mode) dans la queue de O ;
// mise en attente de transaction
bloquer la transaction t ;
Lock := false ;
};
}
‹#›
D'après G. Gardarin
Algorithme de l'opération Unlock
Procédure Unlock(Transaction t, Objet O)
{t.verrou(O) := 0 ;
Pour chaque transaction i dans la queue de O
{si Lock(i, O,M) alors
{enlever (i,M) de la queue de O ; débloquer i ;} ;
}
}
‹#›
D'après G. Gardarin
Problèmes liés au verrouillage
Verrou mortel
Risques de cycles d'attente entre transactions.
T2
T1
Granularité des verrous
T3
au niveau page : de petits objets risquent d'être verrouillés
en trop grands nombres
au niveau objet : nombre trop important de verrous, d'où une
gestion difficile
‹#›
D'après G. Gardarin
Résolution du verrou mortel
Prévention
Définition de critères de priorité pour éviter que le problème
ne se pose.
Exemple : priorité aux transactions les plus anciennes.
Détection
Gestion du graphe des attentes.
Lancement d'un algorithme de détection de cycles dès
qu'une transaction attend trop longtemps.
Choix d'une transaction victime pour briser le cycle.
‹#›
D'après G. Gardarin
Améliorations du verrouillage
Relâchement des verrous en lecture après opération
- : non garantie de la reproductibilité des lectures.
+ : verrous conservés moins longtemps.
Accès à la version précédente lors d'une lecture
rendue bloquante
- : nécessité de conserver une version antérieure (journaux).
+ : une opération de lecture n'est pas bloquante en général.
‹#›
D'après G. Gardarin
Granularité variable
Plusieurs granules de verrouillage
sont définis, imbriqués les uns
dans les autres.
base
classe
Le verrouillage s'effectue en mode
intention
sur
les
granules
supérieurs et en mode effectif sur
les granules choisis
cluster
page
objet
Les modes intentions sont compatibles.
Les modes effectifs et intentions obéissent
aux règles de compatibilité classiques.
‹#›
D'après G. Gardarin
Algorithme du verrouillage altruiste
Restitution des verrous sur les données qui ne sont plus
utilisées
L'abandon d'une transaction provoque des cascades
d'abandons.
Nécessité d'introduire la portée d'une transaction (transaction
ouverte).
Objets
a
T2
T1
-
b
T3
-
c
d
,
,
e
‹#›
D'après G. Gardarin
Temps
Degré d'isolation en SQL2
Définition de degrés d'isolation emboîtés
Degré 0
Garantit les non pertes des mises à jour.
Pose de verrous exclusifs courts lors des écritures.
Degré 1
Garantit la cohérence des mises à jour.
Pose de verrous exclusifs longs en écriture.
Degré 2
Garantit la cohérence des lectures individuelles.
Pose de verrous partagés courts en lecture.
Degré 3
‹#›
Garantit la reproductibilité des lectures.
Pose de verrous partagés longs en lecture.
D'après G. Gardarin
Bilan sur le principe du verrouillage
C'est une approche pessimiste
prévient les conflits,
assez coûteuse,
assez complexe.
Approche retenue
Dans tous les SGBD industriels.
Difficile de faire mieux !
‹#›
D'après G. Gardarin
2.4 Ordonnancement par estampillage
Estampille (TimeStamp) associée à chaque transaction
Date de lancement,
Garantie d'ordre total (unicité).
Conservation des estampilles
Dernier écrivain Écrire r
Plus jeune lecteur Lire er
Contrôle d'ordonnancement
En écriture: estampille écrivain > Écrire r et > Lire er
En lecture: estampille lecteur > Écrire r
Problèmes
Reprise de transaction en cas d'accès non sérialisé
Risque d'effet domino en cas de reprise de transaction
‹#›
D'après G. Gardarin
Algorithme d'ordonnancement
Fonction Lire (Transaction t, Objet O) {
si O.Écrire r t alors {
Lire := Get(O) ; // effectuer la lecture
O.Lire er := MAX (O.Lire er,t) ; // mettre à jour dernier
lecteur }
sinon Abort(t); } .
Fonction Écrire (Transaction t, Objet O, Contenu C){
si O.Écrire r t et O. Lire er t alors{
Set(O,C) ; // effectuer l'écriture
O.Écrire r := t ; // mettre à jour dernier écrivain }
sinon Abort(t); } .
‹#›
D'après G. Gardarin
La certification optimiste
Les contrôles sont effectués seulement en fin de
transaction
Phase d'accès: les OIDs des objets lus/écrits sont conservés.
Phase de certification : vérification de l'absence de conflits
(L/E ou E/E sur un même objet) avec les transactions certifiée
pendant la phase d'accès.
Phase d'écriture (commit) pour les transactions certifiées.
Avantages et inconvénients:
+ : test simple d'intersection d'ensembles d'OIDs en fin de
transaction.
- : tendance à trop de reprises en cas de conflits fréquents
(effondrement).
‹#›
D'après G. Gardarin
Bilan Estampillage
Approche optimiste
coût assez faible,
détection et guérison des problèmes.
Guérison difficile
Catastrophique en cas de nombreux conflits.
Absorbe mal les pointes de charge.
Sophistication
Ordonnancement multi-versions
‹#›
D'après G. Gardarin
2.5 Techniques avancées et modèles étendus
Transactions longues
Mise à jour d'objets complexes.
Sessions de conception.
Prise en compte de la sémantique des applications
Opérations commutatives (e.g., ajouts d'informations).
Essais concurrents.
Travail coopératif
Modèles concurrents plutôt que séquentiels.
‹#›
D'après G. Gardarin
Commutativité d'Opérations
Possibilité de distinguer d'autres opérations que celles
de Lecture/Ecriture
Chaque objet est doté de sa liste d'opérations (méthodes).
Les opérations commutatives n'entraînent pas de conflits.
La commutativité peut dépendre du résultat.
Cas des ensembles
[Ins,ok]
insertion avec succès
[Del,ok]
suppression avec succès
[In, true]
appartenance avec succès
[In, False] appartenance avec échec
‹#›
D'après G. Gardarin
Commutativité d'Opérations
[Ins,ok]
[Del,ok]
[In, true]
[In, False]
[Ins,ok]
1
0
0
0
[Del,ok]
0
1
0
1
[In, true]
0
0
1
1
[In, False]
0
1
1
1
Matrice de commutativité
‹#›
D'après G. Gardarin
Contrôleur de Commutativité
Un contrôle de concurrence défini au niveau de la classe
opère sur chaque objet.
Il autorise les opérations commutatives.
Il bloque les opérations non commutatives (ordonnancement).
Le modèle est ouvert et nécessite
soit des transactions de compensations,
soit la gestion de listes de transactions dépendantes.
Un potentiel pour les SGBDO non encore implémenté
(complexe)
‹#›
D'après G. Gardarin
Transactions Imbriquées
Obtenir un mécanisme de reprise
multi-niveaux
Permettre de reprendre des parties
logiques de transactions
Faciliter l'exécution parallèle de
sous-transactions
Begin(T)
Objectifs
Schéma
Begin(t'1)
Begin(t1)
Commit(t1)
Commit(t'1)
Commet t1
Begin(t2)
Reprises et abandons partiels
Possibilité d'ordonner ou non les
sous-transactions
Begin(t21)
Commit(t21)
Abort(t2)
Commit(T)
‹#›
Annule t2 et t21
D'après G. Gardarin
Verrouillage et Transactions Imbriquées
Chaque transaction peut acquérir ou relâcher des
verrous.
Un verrou est accepté si l'objet est libre ou verrouillé par
un ancêtre.
Les verrous non relâchés sont restitués à la transaction
mère.
Problèmes de conflits entre sous-transactions parallèles
Risque de verrous mortels,
L'ancêtre commun peut trancher.
Gestion de journaux multi-niveaux
Organisation sous forme de piles,
Nécessité de journaux multiples en cas de parallélisme.
‹#›
D'après G. Gardarin
Sagas
Groupe de transactions ordonnées avec transactions
compensatrices.
En cas de panne du groupe, les transactions de
compensation sont exécutées.
T1
T1
‹#›
T2
T2
T3
CT2
Tn
...
CT1
D'après G. Gardarin
Activités : propriétés souhaitées
Contexte persistant.
rollforward, rollback avec compensations.
Flot de contrôle dépendant des succès et échecs.
différencier les échecs systèmes des échecs de programmes.
Monitoring d'activités:
état d'une activité, arrêt, ...
‹#›
D'après G. Gardarin
Langage de Contrôle d'Activités
Exemple: réservation pour départ en vacances
T1 : réservation avion alternative : location voiture
T2 : réservation hôtel
T3 : location voiture
Activité
Ensemble d'exécution de transactions avec alternative ou
compensation.
Langage de contrôle d'activités
Possibilité de définir un transaction vitale (ex: réservation
hôtel).
Langage du type :
‹#›
If abort, If commit, Run alternative, Run compensation, …
D'après G. Gardarin
Transaction multi-niveaux
BD PARTAGEE
Objet
Versionnable
V2
V1
BD PERSONNELLE
CheckOut
Version
Personnelle
CheckIn
V3
CheckOut
Version
Personnelle
V4
‹#›
CheckIn
D'après G. Gardarin
CheckOut/CheckIn
ChechOut
Opération d'extraction d'un objet de la BD pour en dériver une
nouvelle version.
CheckIn
Opération de réinstallation d'une nouvelle version de l'objet
dans la BD.
Lecture
Lecture
1
Ecriture
0
COut P
1
COut E
0
Ecriture
0
0
0
0
COut Partagée
1
0
1
0
COut Exclusif
0
0
0
0
‹#›
D'après G. Gardarin
Fusion des Versions
Maintient différentiel
Seuls les objets/pages modifiés sont maintenus.
Aucun objets communs n'est modifié
La fusion est une union des "deltas".
Des objets communs sont modifiés
Nécessité d'intervention manuelle (choix).
‹#›
D'après G. Gardarin
2.6 Conclusions
Technique d'amélioration du verrouillage
Transactions ouvertes.
Granularité variable.
Commutativité des opérations.
Transactions imbriquées.
Versions.
Amélioration des modèles transactionnels
Gestion des transactions imbriquées.
Sagas, Activités, Versions.
Beaucoup d'idées, peu d' implémentations originales
La plupart des systèmes utilise le verrouillage type SQL
‹#›
D'après G. Gardarin
3.Gestion de transactions
3.1. Journaux et reprise
3.2. Scénarios de reprise
3.3. Modèles étendus
3.4. Cas des systèmes répartis
‹#›
D'après G. Gardarin
3.1 Journaux des mises à jour
Journal des images avant
Journal contenant les débuts de transactions, les valeurs
d'enregistrement avant mises à jour, les fins de transactions
(commit ou abort)
Il permet de défaire les mises à jour effectuées par une
transaction
Journal des images après
Journal contenant les débuts de transactions, les valeurs
d'enregistrement après mises à jour, les fins de transactions
(commit ou abort)
Il permet de refaire les mises à jour effectuées par une
transaction
‹#›
D'après G. Gardarin
Journal des images avant
Utilisé pour défaire les mises à jour : Undo
2.Log
Page lue
Page modifiée
3.Update
1.Read
4.Write
Base de données
‹#›
D'après G. Gardarin
Journal des images après
Utilisé pour refaire les mises à jour : Redo
3.Log
Page lue
Page modifiée
2.Update
1.Read
4.Write
Base de données
‹#›
D'après G. Gardarin
Gestion des journaux
Journaux avant et après sont unifiés.
Écrits dans un tampon en mémoire et vidés sur disque
en début de l'opération commit
Structure d'un enregistrement :
N° transaction (Trid)
Type enregistrement {début, update, insert, commit, abort}
TupleId
[Attribut modifié, Ancienne valeur, Nouvelle valeur] ...
Problème de taille
On travaille avec N fichiers de taille fixe.
Possibilité d'utiliser un fichier haché sur Trid/Tid.
‹#›
D'après G. Gardarin
Sauvegarde
Sauvegarde périodique de la base
toutes les heures, jours, ...
Doit être effectuée en parallèle aux mises à jour.
Point de Reprise (Checkpoint)
Un Point de Reprise est écrit dans le journal pour le
synchroniser par rapport à la sauvegarde. Il permet de situer
les transactions effectuées après la sauvegarde.
Pose d'un point de reprise
écrire les tampons de journalisation (Log).
écrire les tampons de pages (DB).
écrire un enregistrement spécial "checkpoint" dans le
journal.
‹#›
D'après G. Gardarin
3.2 Scénarios de Reprise
Les mises à jour peuvent être effectuées directement
dans la base (en place)
la base est mise à jour immédiatement, ou "dès que
possible" pendant que la transaction est active.
Les mises à jour peuvent être effectuées en mémoire
et installées dans la base à la validation (commit)
le journal est écrit avant l'écriture des mises à jour.
‹#›
D'après G. Gardarin
Stratégie do-undo (faire/défaire)
Mises à jour en place
l'objet est modifié dans la base.
Utilisation des images avant
copie de l'objet avant mise à jour.
utilisée pour défaire en cas de panne.
Update
2. LogPage
Mémoire
cache
Journal avant
3. WritePage
Undo
1. LirePage
Base
‹#›
D'après G. Gardarin
Stratégie do-redo (faire/refaire)
Mises à jour en mode différentiel
L'objet est modifié en page différentielle (non en
place/journal).
Utilisation des images après
copie de l'objet en journal après mise à jour (do),
utilisée pour refaire en cas de panne (redo).
Update
3. LogPage
Mémoire
cache
2. WritePage
Redo
1. LirePage
Base
‹#›
Journal après
Ombre
Commit
D'après G. Gardarin
Pages ombres
Table des Pages Ombres
Nom
Fichier
Adresse
COMMIT
Table des
Pages
Page Ombre
Page Ombre
Nouvelle Table des Pages
Nouvelles Pages
‹#›
D'après G. Gardarin
La gestion des tampons (buffers)
Gestion des caches et des des journaux
Écriture du journal lorsqu'un tampon est plein,
ou lorsqu'une transaction commet.
Gestion des caches et des bases
Modification de la la page en mémoire.
Vidage du cache sur disque effectué en différé (processus
E/S).
Synchronisation journaux / base
Le journal doit toujours être écrit avant la modification de la
base !
‹#›
D'après G. Gardarin
Commits bloqués
Afin d'éviter 3 e/s pour 1:
Le système reporte l'enregistrement des journaux à la phase
commit.
Plusieurs transactions sont commises simultanément.
Les transactions à commettre sont mises en attente pour
bloquer un unique tampon d'écriture dans le journal.
Résultat
La technique des "commits" bloqués permet d'améliorer les
performances lors des pointes sans excès d'attente trop
sensible pour les transactions.
‹#›
D'après G. Gardarin
Reprise à froid
En cas de perte d'une partie de la base, on repart de la
dernière sauvegarde.
Le système retrouve le checkpoint associé.
Il ré-applique toutes les transactions commises depuis
ce point .
(for each committed Ti : redo (Ti))
‹#›
D'après G. Gardarin
3.3 Journalisation et modèles étendus
Rappelons qu'ils s'agit d'applications longues
composées de plusieurs transactions coopérantes.
Seules les mises-à-jour sont journalisées.
Si nécessité de défaire une suite de transactions :
contexte ad-hoc stocké dans une table temporaire,
nécessité d'exécuter des compensations.
‹#›
D'après G. Gardarin
Points de Sauvegardes
Introduction de points de sauvegarde intermédiaires
(savepoint, commitpoint)
Begin_Trans
‹#›
update
update
savepoint
update
update
unité d'oeuvre
Non perte du contexte
unité d'oeuvre
Commit
D'après G. Gardarin
3.4 Transactions réparties
Objectif
Garantir que toutes les mises à jour d'une transaction sont
exécutées sur tous les sites ou qu'aucune ne l'est.
Exemple
Transfert de la somme X du compte A vers le compte B
DEBUT
site 1: A = A - X
site 2: B = B + X
// Une panne provoque une incohérence des données
FIN
Problème
Le contrôle étant réparti, chaque site peut librement décider
de valider ou d'annuler ...
‹#›
D'après G. Gardarin
Commit à 2 Phases : principes et définitions
Principe
Division de l'opération COMMIT en deux phases :
Phase 1
Préparation de l'écriture des résultats des mises à jour dans la BD.
Centralisation du contrôle.
Phase 2
Écriture des résultats dans la BD.
Coordinateur de l'opération
Le composant système d'un site qui applique le protocole.
Participant
Le composant système d'un autre site participant à
l'exécution de la transaction.
‹#›
D'après G. Gardarin
Commit en 2 Phases : protocole C/S
1. Préparer
Le coordinateur demande aux autres sites s'ils sont prêts à
commettre leur mise à jour.
2a. Succès : commettre
Tous les participants effectuent leur validation sur ordre du
client.
2b. Echec : abort
Si un participant n'est pas prêt, le coordinateur demande à
tout les autres sites de défaire la transaction.
Remarque
Le protocole nécessite la journalisation des mises à jour
préparées et des états des transactions dans un journal local
à chacun des sites participants.
‹#›
D'après G. Gardarin
Cas favorable
SITE COORDINATEUR
SITE PARTICIPANT 2
SITE PARTICIPANT 1
PREPARE
OK
COMMIT
ACK
‹#›
PREPARE
OK
COMMIT
ACK
D'après G. Gardarin
Cas défavorable (1)
SITE COORDINATEUR
SITE PARTICIPANT 2
SITE PARTICIPANT 1
PREPARE
PREPARE
OK
KO
ABORT
ABORT
ACK
ACK
‹#›
D'après G. Gardarin
Cas défavorable (2)
SITE COORDINATEUR
SITE PARTICIPANT 2
SITE PARTICIPANT 1
PREPARE
OK
COMMIT
PREPARE
OK
COMMIT
ACK
STATUS
COMMIT
ACK
‹#›
D'après G. Gardarin
Commit distribué ou centralisé
Validation à deux phases centralisée
Prepare
OK
Commit
OK
Possibilité de diffuser la réponse au PREPARE
chaque site peut décider localement dans un réseau sans perte
OK
Prepare
‹#›
D'après G. Gardarin
Transitions d'états
Initia
l
CCommit/Prepare
Wait
VoteKO/GAbort
Abort
VoteOK/GCommit
Initial
Commit
Prepare/VoteOK
COORDINATEUR
Ready
GAbort/Ack
Abort
GCommit/Ack
Commit
PARTICIPANT
‹#›
D'après G. Gardarin
Transactions bloquées
Que faire en cas de doute ?
Demander l'état aux autres transactions : STATUS
conservation des états nécessaires.
message supplémentaire.
Forcer la transaction locale : ABORT
toute transaction annulée peut être ignorée.
cohérence garantie avec un réseau sans perte de message.
Forcer la transaction locale : COMMIT
‹#›
toute transaction commise peut être ignorée.
non garantie de cohérence avec le coordinateur.
D'après G. Gardarin
Commit en 3 Phases
en cas de time-out en état “Prêt”,
le participant est bloqué
le commit à 3 phases permet
d'éviter les blocages
Initial
Inconvénient du commit à 2
phases
CCommit/Prepare
VoteKO/GAbort
Prepare,
Prepare to Commit,
Global-Commit,
Global-Abort.
VoteOK/PréCommit
Abort
PréCommit
PréOK/GCommit
Commit
Messages du commit à 3
phases
Wait
Initial
Prepare/VoteOK
GAbort/Ack
Abort
Ready
PréCommit/PréOK
PréCommit
GCommit/Ack
Commit
‹#›
D'après G. Gardarin
Protocole arborescent TP
TP est le standard proposé par
l'ISO dans le cadre OSI
Protocole arborescent
Tout participant peut déclencher une
sous-transaction.
Un responsable de la validation est
choisi.
Un coordinateur est responsable de ses
participants pour la phase 1.
Coordinateur global
Coordinateur local
Coordinateur localPoint de validation
(Noeud critique)
collecte les PREPARE
demande la validation
Le point de validation est responsable de
la phase 2
‹#›
envoie les COMMIT.
D'après G. Gardarin
4. Moniteurs transactionnels
Support de transactions ACID
Accès continu aux données
Reprise rapide du système en cas de panne
Sécurité d'accès
Performances optimisées
Partage de connexions.
Réutilisation de transactions.
Partage de charge
Distribution de transactions.
‹#›
Support de bases hétérogènes
Respect des normes et standards
D'après G. Gardarin
Moniteur transactionnel : modèle
Modèle DTP de l'X/OPEN
Programme d'application AP
Gestionnaire de transactions TM
Gestionnaire de communication
CRM
Gestionnaire de ressources RM
TX
TM
Interfaces standards
TX = interface du TM
XA = interface du RM
intégration de TP
AP
CRM
TM
XA
Types de RM
gestionnaire de fichiers
SGBD
périphérique
‹#›
RM
D'après G. Gardarin
Interface applicative TX
tx_open
ordonne au TM d'initialiser la communication avec tous les
RM dont les librairies d'accès ont été liées à l'application.
tx_begin
ordonne au TM de demander aux RM de débuter une
transaction.
tx_commit ou tx_rollback
ordonne au TM de coordonner soit la validation soit
l'abandon de la transaction sur tous les RM impliqués.
tx_set_transaction_timeout
positionne un “ timeout ” sur les transactions
tx_info
permet d'obtenir des informations sur le statut de la
transaction.
‹#›
D'après G. Gardarin
Interface ressource XA
xa_open
ouvre un contexte pour l'application.
xa_start
débute une transaction.
xa_end
indique au RM qu'il n'y aura plus de requêtes pour le compte
de la transaction courante.
xa_prepare
lance l'étape de préparation du commit à deux phases.
xa_commit
valide la transaction.
xa_rollback
abandonne la transaction.
‹#›
D'après G. Gardarin
Principaux moniteurs (1)
Encina de Transarc
Issu de CMU (1992), racheté par IBM
Construit sur DCE (OSF) pour la portabilité et la sécurité
Transactions imbriquées
Conformité DTP : Xa, CPI-C, TxRPC
Open CICS de IBM
Construit sur Encina (et DCE)
Reprise de l'existant CICS (API et outils)
Conformité DTP : Xa, CPI-C
‹#›
D'après G. Gardarin
Principaux moniteurs (2)
Tuxedo de USL
Éprouvé (depuis 1984), à la base de DTP
Supporte l'asynchronisme, les priorités et le routage
dépendant des données
Conformité DTP: Xa, Tx, XaTMI, CPI-C, TxRPC
Top End de NCR
Produit stratégique d'AT&T
Respecte le modèle des composants DTP (AP, RM, TM,
CRM)
Haute disponibilité
Conformité DTP: Xa, Xa+, Xap-Tp, Tx
‹#›
Autres : UTM de Siemens, Unikix
D'après G. Gardarin
Le marché
900
800
700
Tuxedo
600
millions $
Encina
500
CICS
400
UTM
300
TOP END
200
Autres
100
0
1994
1995
1996
1997
Gartner Group
‹#›
D'après G. Gardarin
MTS de Microsoft
Microsoft Transaction Server
Intégré à DCOM
Partage de grappes de NT (cluster)
Les disques sont supposés partagés.
Allocation des ressources en pool aux requêtes :
pool de connexion aux ressources (SQL Server),
pool de transactions (support),
pool de machines.
Ne respecte pas les standards !
‹#›
D'après G. Gardarin
Conclusion sur les moniteurs transactionnels
Des techniques complexes.
Un problème bien maîtrisé dans les SGBDR.
La concurrence complique la gestion de transactions.
Les transactions longues restent problématiques.
Enjeu essentiel pour le commerce électronique.
‹#›
validation fiable
reprise et copies
partage de connections
partage de charge
D'après G. Gardarin