Transacciones y Control de Concurrencia II

Anuncio
Procesamiento de Transacciones
Material basado en los capítulos 12 y 13 del libro:
Sistemas Distribuidos. CyD. G. Coulouris, J.
Dollimore and T. Kindberg.
Contenido
• Mecanismos de Control de Concurrencia
– Control de Concurrencia a través de bloqueos
– Control Optimista de la Concurrencia
– Ordenación por marcas de tiempo
– Comparación de métodos.
• Recuperación de Transacciones
Algoritmo Optimista
Se permite que las transacciones procedan, como si no
hubiera posibilidad de conflicto con otras transacciones,
hasta que el cliente complete su tarea y solicite un
EndTransaction. Cuando aparece un conflicto se abortará la
transacción.
Las modificaciones/accesos se hacen sobre espacios
privados o provisionales y se lleva registro de los datos que
han sido modificados/accedidos. Al momento del commit, se
chequea que los espacios privados sean válidos, de no
serlos, se aborta la transacción.
A toda transacción se le asigna un identificador (orden
secuencial ascendente).
Algoritmo Optimista
Cada transacción cumple tres fases:
Ejecución o Trabajo:Todos los reads se ejecutan
inmediatamente sobre la última versión “consumada” del
dato. Los writes crean versiones tentativas. Se mantiene un
conjunto de lectura (datos leídos) y un conjunto de escritura
(versiones tentativas de los datos). No hay posibilidad de
“lecturas sucias”, sólo se leen valores consumados.
Validación: Ante la solicitud de un commit, se valida si la
transacción realizó operaciones conflictivas con otras
transacciones. Si la validación tiene éxito se puede hacer
COMMIT. Si falla, se debe usar alguna forma de resolución
de conflictos (abortar alguna de las transacciones)
Algoritmo Optimista
Fase de validación (cont.):
Ante el End_transaction, a cada transacción se le asigna
un número secuencial ascendente, i, que define su
posición en el tiempo.
Algoritmo Optimista
Actualización: Si la transacción logra su validación,
todos los cambios realizados sobre los espacios
privados se actualizan en las versiones originales.
Algoritmo Optimista
Fase de validación (Tv):
La validación se basa en las siguientes reglas :
Tv
Ti
Regla (i<v)
1.
write read
Ti no debe leer datos escritos Tv
2.
read write Ti no debe escribir datos leídos por Tv
3.
write write
Ti no debe escribir datos que está escribiendo o
haya escrito Tv y Tv no debe escribir datos que está escribiendo
o haya escrito Ti
Simplificación: fases de validación y escritura son
secciones críticas (muy cortas), se supondrá que no
pueden solaparse 2 transacciones en estas fases; se
satisface la regla 3. Sólo hay que validar las reglas 1 y 2
Algoritmo Optimista
Validación hacia atrás:
Los reads de las Ti se realizaron antes que la
validación (por tanto escritura) de Tv, entonces se
cumple la regla 1.
Tv
Ti
Regla (i<v)
1.
write read
Ti no debe leer datos escritos por Tv
2.
read write Ti no haya escrito datos leídos por Tv
3.
write write
Ti no debe escribir datos que está escribiendo
o haya escrito Tv y Tv no debe escribir datos que está
4.
escribiendo o haya escrito Ti
5.
Reads
Tv
Writes
Ti
Algoritmo Optimista
Validación hacia atrás:
Sólo se valida la regla 2 para cada Ti (Ti(write), Tv(read)):
que Tv no haya leído un valor que hayan escrito las Ti.
valid= true;
for (Ti=startTn+1;Ti<=finishTn,Ti++) {
if (“read_set” of Tv intersects “write_set” Ti)
valid=false;
}
startTn: Ti más grande asignado a una
transacción committed al momento que Tv entra a
su fase de trabajo
finishTn: Ti más grande asignado a una
transacción committed al momento que Tv entra a
su fase de validación
Algoritmo Optimista
Hay que validar con las Ti que hacen Commit
durante la fase de Trabajo de Tv.
Sólo es necesario validar los conjuntos de
lectura. Las transacciones que sólo hacen
escritura no se validan (lo que ella escriba lo
validarán otras transacciones mayores
posteriormente).
Si Tv no es válida, se aborta
Algoritmo Optimista
Validación hacia atrás:
Transacciones
anteriores committed
T1
T2
T3
Transacción en validación
activa1
Tv
activa2
Validación
Trabajo
Escritura
Algoritmo Optimista
• Validación hacia atrás: requiere que los conjuntos de
escritura de las versiones antiguas de los objetos,
actualizados por transacciones culminadas, se
retengan hasta que no hayan transacciones
solapadas, aún no validadas, con la que pudieran
entrar en conflicto.
• En un entorno con transacciones largas, el mantener
estos conjuntos puede ser un problema.
Algoritmo Optimista
• Validación hacia adelante: el conjunto de
escritura de Tv se compara con el conjunto de
transacciones activas que se solapan, aquellas
que están aún en su Fase de Trabajo.
Algoritmo Optimista
Fase de validación:
La validación se basa en las siguientes reglas :
Tv
Ti
1. write read
Regla (v<i)
Tv no debe escribir datos leídos por Ti
2. read write Tv no debe leer datos escritos por Ti
3. write write
Ti no debe escribir datos que está escribiendo o
haya escrito Tv y Tv no debe escribir datos que está escribiendo o
haya escrito Ti
Writes Tv
Reads Ti
Algoritmo Optimista
Validación hacia adelante:
Se satisface la regla 2 porque las transacciones activas no
escriben mientras que Tv no se ha completado.
Sólo se valida la regla 1 para cada Ti: se compara el
conjunto de escritura de Tv con los conjuntos de lectura
de las transacciones activas.
valid= true;
for (Tid=activa1;Tid<=activaN,Tid++) {
if (“write_set” of Tv intersects “read_set” of Ti)
valid=false;
}
Algoritmo Optimista
Validación hacia delante:
activaX: Representan transacciones que aún no han
entrado a la fase de validación
Las transacciones que sólo hacen lecturas no requieren
ser validadas
Opciones si Tv no es válida:
Abortar las activas y consumar Tv
Abortar Tv
Algoritmo Optimista
Validación hacia adelante:
Transacciones
anteriores committed
T1
T2
T3
Transacción en validación
activa1
Tv
activa2
Validación
Trabajo
Escritura
Algoritmo Optimista
Desventajas:
Hay posibilidad se inanición: una transacción puede
abortar indefinidas veces y no se contempla un
mecanismo para evitarlo.
Este algoritmo no serviría en sistemas con
transacciones largas o muchas transacciones en
conflicto.
Contenido
• Mecanismos de Control de Concurrencia
– Control de Concurrencia a través de bloqueos
– Control Optimista de la Concurrencia
– Ordenación por marcas de tiempo
– Comparación de métodos.
Algoritmo por Marcas de Tiempo
Las operaciones se validan al momento en que se están
ejecutando.
Cuando una transacción comienza, se le asigna un
timestamp
La regla de ordenación básica por marca de tiempo está
basada en los conflictos de operación:
Una solicitud de una transacción para escribir un objeto
es válida sólo si ese objeto fue leído y escrito por
última vez por transacciones anteriores en el tiempo.
Una petición de lectura a un objeto no es válida si el
objeto fue escrito por última vez por una transacción
posterior en el tiempo.
Algoritmo por Marcas de Tiempo
Se trabaja con versiones tentativas. Las versiones
tentativas de los objetos son consumadas en el orden
determinado por las marcas de tiempo de las transacciones
que las realizaron.
Cada item de datos tiene asociado:
Un timestamp de escritura (Twrite_commit), un timestamp
de lectura (Tread) y un conjunto de versiones tentativas con
su propio timestamp
Un write aceptado genera una versión tentativa
Un read se dirige a la versión con el máximo timestamp
menor que el timestamp de la transacción
Algoritmo por Marcas de Tiempo
Para saber cuando una operación de escritura es válida se
aplica el siguiente algoritmo:
Sea Tj una transacción que desea hacer una operación de
escritura sobre el objeto D.
If ((Tj >= Max (Tread en D)) &&
(Tj > write_commit en D))
Proceder con el write sobre una versión tentativa
nueva, con marca de tiempo Tj
else // write is too late
Abortar Tj;
Algoritmo por Marcas de Tiempo
Regla de escritura (No se muestran las marcas de lectura)
a) T3->write
antes
después
b) T3-> write
T2
T2
T3
c) T3->write
antes
después
T1
T1
T4
T3 T4
antes
T1
T2
después
T1
T2 T3
d) T3-> write
antes
T4
T3 Aborta
después
T4
Versión
committ
Versión
tentativa
Algoritmo por Marcas de Tiempo
Para saber cuando rechazar o aceptar inmediatamente una
operación de lectura
Sea Tj una transacción que desea hacer un read sobre el objeto
D.
If ((Tj > Max (Write_Commit en D))
Sea Ds la versión de D con la máxima marca de tiempo de
escritura menor a Tj (commited o no)
Si se ha consumado Ds: realiza la operación de lectura.
Si no, espera hasta que la transacción que hizo la versión
Ds haga commit o abort.
else // write is too late
Abortar Tj;
Algoritmo por Marcas de Tiempo
Regla de lectura
a) T3->read
T2
b) T3-> read
read se ejecuta
inmediatamente
Seleccionado (Ds)
T2
T4
read se ejecuta
inmediatamente Versión
committ
Seleccionado (Ds)
tiempo
c) T3->read
T1
tiempo
Versión
tentativa
d) T3-> read
T2 read espera
Seleccionado (Ds)
tiempo
T4
T3 Aborta
tiempo
Algoritmo por Marcas de Tiempo
• Las versiones commit (consumadas) de cada
objeto deben crearse en el orden de las
marcas de tiempo.
• Un coordinador necesita esperar, a veces, que
se completen las transacciones anteriores
antes de escribir todas las versiones
consumadas de los objetos.
La última marca de lectura
Corresponde a la transacción T
T
U
a
MTL
{}
MTE
S
beginT
Bal=b.obtenBalance()
b.crédito(balance*1.1)
a.Débito()
Commit
BeginT
Bal=b.obtenBalance()
Espera por T
….
…
Bal=b.obtenBalance()
b.Crédito()
b
c
MTL MTE
{}
S
{T}
S,T
MTL MTE
{}
S
S,T
T
T
{U}
T,U
c.Débito()
S < T < U. En negritas se colocan las operaciones ya consumadas
Algoritmo por Marcas de Tiempo
S,U
Ejercicio
T
U
T
U
BeginT
BeginT
BeginT
escribe(i,55)
escribe(j,66)
X=lee(i)
Escribe(j,44)
Commit
BeginT
Escribe(i,55)
Escribe(j,66)
commit
X=lee(i)
Escribe(j,44)
Ejecute el algoritmo de secuenciación por marcas de tiempo. Las marcas
de tiempo iniciales de lectura y escritura son t0.
T
U
BeginT
y = lee(k)
BeginT
Escribe(i,55)
Escribe(j,66)
x = lee(i)
Commit
Escribe(j,44)
Commit
Qué pasa cuándo va a terminar la transacción T si ejecutamos el algoritmo
Optimista con validación hacia atrás, hacia adelante???
Se cumple equivalencia secuencial?
Transacciones
Gestor de Transacciones
Planificador del Gestor de Transacciones
Equivalencia Secuencial
Protocolos para el Control de la
Concurrencia
Algoritmos por Marcas de
Tiempo
Algoritmos Optimistas
Bloqueos
Propiedad de Aislamiento
Concurrencia
Ejercicio
• Para enviar a mas tardar el martes 29 de octubre
a: [email protected]
• Comparación de todos los métodos de control de
concurrencia revisados en clase:
• Bloqueos (2 fases, 2 fases estricto,
lectores/escritores, bloqueo de dos versiones,
control optimista de la concurrencia hacia
adelante y hacia atrás y validación por marcas de
tiempo). Realice una tabla comentando Ventajas
y desventajas.
• Debe realizarlo individualmente.
Descargar