Académique Documents
Professionnel Documents
Culture Documents
Transactions Distribuées
Présentation Générale
Contexte
Données partagées
Traitements concurrents
Pannes
Problématique
Gestion de la concurrence & des pannes
Maintien de la cohérence
Stockage persistent
Échec de l'écriture possible (détecté à la lecture)
Sans impact sur les données existentes
Messages
Délais arbitraires
Pertes et corruptions (détectées)
Processus
Défaillance de type « Fail-stop »
OpenTransaction() Tid
Nouvelle transaction
CloseTransaction(Tid) (commit,abort)
Validation par le client
Échec possible (annulation par le serveur)
AbortTransaction(Tid)
Annulation par le client
Transactions locales
Gestion de la concurrence
Annulation de transaction
Transactions imbriquées
Techniques
Verrous & Interblocages
Gestion optimiste
Datation
Transactions distribuées
Objectif du service
Performances
Maximiser la concurrence
Exécution concurrente
Entrelacement des opérations
« Serially equivalent » ou « serializable »
Perte d'écriture
Transactions avec écritures concurrentes
T1: X := X+1
T2: X := X+2
Entrelacement possible et non valide
T1 T2
t=0 V1 := GetX()
t=1 V2 := GetX()
t=2 SetX(V1+1)
t=3 SetX(V2+2)
Lecture incohérente
Transactions avec lecture & écriture concurrentes
T1: A := A-1; B := B+1
T2: C := A+B
Entrelacement possible et non valide
T1 T2
t=0 A := A-1
t=1 V1 := A
t=2 V2 := B
t=3 B := B+1
t=4 C := V1+V2
05/12/09 Transactions distribuées 12
Équivalence séquentielle
Critère de correction
Vérifier l'entrelacement lié à la concurrence
Prévention
Pertes d'écriture
Lectures incohérentes
Alternatives
Verrous
Gestion de concurrence optimiste
Ordre par datation
05/12/09 Transactions distribuées 13
Verrous
Verrous
Sur chaque objet accédé
Association avec une transaction
Relâchés en fin de transaction
Partage de verrous
Parallélisation des accès
Interblocage
T1 verrouille A et veut accéder à B
T2 verrouile B et veut accéder à A
05/12/09 Transactions distribuées 14
Gestion de concurrence optimiste
Lectures sales
Isolation des transactions
Transactions concurrentes
T1: A := A+1 || T2: A := A+2
Exécution sérialisable mais non valide
T1 T2
t=0 a := a+1
t=1 a := a+2
t=2 commit()
t=3 abort()
Validation de T2?
Situation non réparable!
Stratégie
Dépendance de T2 vers T1
Lecture de données altérées
Suspendre la validation de T2
Attendre la fin de T1
Validation de T1 : validation de T2
Annulation de T1 : annulation de T2
Annulations en cascade
Ti dépend de Ti-1 qui ... dépend de T1
Annulation de T1 : annulation de T2, ..., Ti!
Prévention
Dépendance vers les transactions non validées
Suspension des lectures sur les objets altérés par
des transactions en cours
T1 T2
t=0 A := 1
t=1 A := 2
t=2 commit()
t=3 abort()
A=?
T1 T2
t=0 A := 1
t=1 A := 2
t=2 abort()
t=3 commit()
A=?
T1 T2
t=0 A := 1
t=1 A := 2
t=2 abort()
t=3 abort()
A=?
Si on échange t=2 et t=3?
Prévention?
Lectures sales
Suspension des lectures
Écritures prématurées
Suspension des écritures
En somme
Suspension des lectures & des écritures
Exécution dite « stricte » des transactions
Assure la propriété d'isolation
05/12/09 Transactions distribuées 27
Versions « tentatives »
Technique des « tentatives »
Modification d'un objet
Copie locale à la transaction
Validation de la transaction
Enregistrement réel de toutes les copies locales
Annulation de la transaction
Rien à faire!
Assure l'isolation des transactions
Hiérarchie de transactions
Arborescence
Une transaction principale : racine
Transactions intermédiaires : sous-transactions
Sous-transaction
Exécution concurrente
Sous-transaction de même niveau
Validation & échec
Local à la sous-transaction
Pas de durabilité
05/12/09 Transactions distribuées 30
Règles de validation
Assurer la cohérence
Sérialisation des accès
Garantie d'une exécution sérialisable?
Vérouillage à deux phases (2PL)
1ère phase : acquisition des verrous
2ème phase : libération des verrous
Interdiction d'acquérir de nouveaux verrous dès lors
qu'un verrous a été relâché au cours de la transaction
Détection
Cycle dans le graphe des « qui attend qui? »
Choix de la transaction à annuler
Prévention
Verrouiller tout l'espace de travail au début de la
transaction
Atomicité du verrouillage
Connaissance de l'espace de travail?
Ordonner l'acquisition des verrous
Temporisation
Délai d'invulnérabilité
Hors délai
Toute tentative de verrouillage concurrent casse le verrou
hors délai et annule la transaction associée
Choix du délai
Système en surcharge
Pénalise les « grosses transactions »
Fréquence liée à la granularité des verrous
Alternative au verrouillage
Verrous
Assurer une exécution sérialisable
Surcoût (même en lecture)
Interblocage
Concurrence limitée par les techniques de prévention
(interblocage, échec en cascade...)
Gestion optimiste
Hypothèse : peu d'accès conflictuels
Laisser vivre & annuler les cas erronés
Annulation : réexécution par le client
05/12/09 Transactions distribuées 42
Principe
Trois phases
Phase de travail
Phase de validation
En fin de transaction (validation ou annulation)
Échec : peut conduire à annuler d'autres transactions
Phase de mise à jour
Validation persistente des modifications réalisées par la
transaction
Transaction en lecture : rien à faire!
Versions tentatives
Tout objet altéré par la transaction
Accès en lecture
Lecture de la tentative de la si elle existe
Lecture de la version validée sinon
Informations connexes
Read set
Ensemble des objets lus par la transaction
Write set
Ensemble des objets altérés par la transaction
05/12/09 Transactions distribuées 44
Validation
Comparaison
Transaction en cours de validation
Read set (objets accédés en lecture)
Transactions précédentes
Write sets (objets altérés)
Conservation des write sets des transactions
passées tant que nécessaire
Les transactions en écriture seulement valident
toujours
05/12/09 Transactions distribuées 46
Validation en avant
Comparaison
Transaction en cours de validation
Write set (objets altérés)
Transaction à venir (en cours)
Read sets (objets accédés en lecture)
Issue de la validation : annulation ou
suspension
Annuler la transaction en cours de validation ou les
transactions à venir et en conflits?
Les transactions en lecture seulement valident
05/12/09 Transactions distribuées 47
Conclusion
Validation en arrière
Méthode de résolution de conflit imposée
Validation en avant
Choix dans la résolution des conflits
Hypothèse : peu d'accès conflictuels
Annulation : surcoût & perte de travail
Famine
Rejeu des transactions annulées par les clients
Annulation systématique?
05/12/09 Transactions distribuées 48
Gestion par datation
T4
Version tentative de T4
T2
Objet lu par T2
T3 altère un objet
Annulation de T3
Avant T1 T2 Avant T1 T4
Après T1 T2 T3 Après T1 T3 T4
T3 lit un objet
Avant T2 Avant T4
Après T2 T3 Après T4
Avant T2 T4 Avant T1 T2
Après T2 T3 T4 Après T1 T2 T3
Lecture de T2 Suspension de T3
Définition
Implication de différentes machines
Deux visions
Transactions plates
Opérations en séquences sur les différents sites
Transactions imbriquées
Exécution concurrente des sous-transactions
Coordination à l'issue de la transaction
Protocole de validation
05/12/09 Transactions distribuées 57
Coordination
Coordinateur Participant
Préparé à valider,
en attente des votes
Préparé à valider,
issue incertaine
Transaction validée
Transaction validée
Transaction terminée
Panne
Participant
Coordinateur
Reprise avec restauration d'un état
Systèmes asynchrones
Délais arbitrairement longs
Pas nécessairement représentatif d'une panne
Temporisations
Suspension des processus
05/12/09 Transactions distribuées 63
Imbrication et distribution (1)
Transactions imbriquées
Extension
OpenSubTransaction(Tid) Tid
GetStatus(Tid) commited, aborted, provisional
Échec et annulation
L'échec d'une sous-transaction n'implique pas l'échec de
la transaction englobante
L'annulation d'une transaction entraîne l'annulation de
toutes ses sous-transactions