Transacciones distribuidas
Sistemas de Operacin II
Transacciones distribuidas
Prof. Carlos Figueira
Basado en material deYudith Cardinale (USB)Andrew Tanembaum y Marteen van Steen
Contenido
Transacciones: Introduccin y definiciones
Algoritmos para completar transacciones
Control de concurrencia
Tratamientos de interbloqueos
Transacciones:
Introduccin
Definiciones
Transaccin
Unidad de clculo consistente, confiable y atmica
Aplica a datos recuperables
Puede estar formada por operaciones simples o compuestas, pero deben ejecutarse de manera atmica
Secuencia: abre transaccin, operaciones, cierra transaccin
Transaccin
ABCSerializacin de operaciones conflictivas
Operaciones compuestas
Operaciones conflictivas
Retardo
Ejecucin
Requerimientos: Todo o nada
Si una transaccin termina exitosamente, los efectos de todas sus operaciones son registrados en espacio de datos
Si falla, no altera espacio de datos, incluso ante fallas del servidor
Propiedades ACID
Atomicidad: la operacin se realiza completa o nada
Consistencia: slo se empieza aquello que se puede acabar.
Aislamiento (isolation): una operacin no puede afectar a otras.
Durabilidad: una vez realizada, la operacin persistir, no se podr deshacer aunque falle el sistema.
Atomicidad
En la recuperacin de cadas el sistema debe decidir qu hacer:Terminar de ejecutar el resto de las acciones
Deshacer acciones que ya haba realizado
Se usan tcnicas de almacenamiento estableSe garantiza que permanecen incluso ante cadas del servidor
Ejemplos: RAID, rplicas
Consistencia
Una transaccin toma el sistema en un estado consistente, y lo deja en un estado consistente
Slo se ejecutan operaciones que no van a romper reglas integridad de la BD.
Qu pasa con dos accesos simultneos conflictivos? Ej: transferencias bancarias de cuenta A a cuentas diferentes (B y C) cuyo monto total excede fondos en A
Aislamiento
Dos transacciones sobre la misma informacin son independientes y no generan error
Los efectos intermedios de una transaccin son invisibles a las otras
Ejecucin concurrente obtiene mismo efecto que ejecucin secuencial
Primitivas sobre transacciones
inicio_transaccion tid : inicia una transaccin y devuelve un identificador de la transaccin
fin_transaccion {Completar, Abortar}Completar: la transaccin termina exitosamente y sus efectos van a almacenamiento permanente (commit: completar, consumar)
Abortar: no se reflejan los cambios. Pueden ser causados por la propia naturaleza de la transaccin, por conflictos con otras transacciones o por fallas.
abortar_transaccion(tid): interrupcin intencional.
leer y escribir: tpicamente una transaccin se compone de una serie de lecturas y escrituras, y algunos clculos.
Transacciones anidadas
Ej: envo de correo electrnico a varios dest.
Transaccin realiza completar y una + externa abortar, se pierden propiedades de atomicidad y aislamiento por cumplir la durabilidad
Generalmente, la durabilidad slo se considera para la transaccin ms externa
En algunos sistemas, la transaccin superior puede decidir hacer completar aun cuando alguna sub-transaccin aborta
Implementacin de transacciones
Espacio de trabajo privadoSe copian los datos en un espacio propio de cada transaccin
Al finalizar (exitosamente) la transaccin, se actualizan datos en almacenamiento permanente
Lista de intencin (write-ahead log)Actualizaciones realizadas directamente en la BD
Se lleva registro de cambios realizados
Transacciones Distribuidas
Involucran mltiples servidores
Datos distribuidos entre varios servidores
Transaccin de un cliente puede incluir mltiples servidores
Transacciones distribuidas pueden ser simples o anidadas
clienteX
Z
Y
Cliente: inicio_transaccioncall X.xcall Y.ycall Z.z end_transaccion
Transacciones Distribuidas
Transaccin distribuida anidada
T
Cliente
X
T1
YT2
MT11
PT22
NT12
T21
Transacciones Distribuidas
Cuando termina transaccin distribuida, la atomicidad exige que todos los servidores acuerden lo mismo (completar o abortar) o todos aborten (basta que uno aborte).
Existen protocolos para llegar a compromisos (Two-phase-Commit y Three-Phase-Commit)
Transacciones distribuidas deben ser globalmente serializables. Existen protocolos de control de concurrencia distribuida
Procesamiento de transacciones distribuidas
CCC
TransactionManagerscheduler
TPSRecoveryManagerCacheManagerData ManagerCCC
TransactionManagerscheduler
TPSRecoveryManagerCacheManagerData Manager
comunicacinTPS: Sistema de Procesamiento de Transacciones(TransactionProcessing System)
Procesamiento de transacciones distribuidas
Cliente inicia transaccin sobre un TPS. El Manejador de Transacciones identifica y localiza objetos invocados.
Invocaciones a objetos locales son pasados al Planificador local; invocaciones a objetos remotos son pasados a su TPS
Cliente inicia transaccin en un nodo => nodo coordinador
Objeto reside en nodo nico (no hay replicacin de objeto). La invocacin del objeto se hace en ese nodo
Procesamiento de transacciones distribuidas
Deben existir mecanismos para localizar un objeto, dado su identificador (nico)
Las instancias del TPS deben cooperar
Cuando un cliente comienza una transaccin, enva un inicio_transaccion a un servidor TPS.El servidor TPS se convierte en coordinador
El resto de TPS que intervengan en la transaccin se convierten en trabajadores
Coordinador de transaccin distribuida
Se requieren otras primitivas
AgregaServidor (tid, id_servidor del coordinador)Mensaje enviado por coordinador a otro servidor informando que participar en transaccin tid.
NuevoServidor (tid, id_servidor del trabajador)Respuesta ante un AgregaServidor de un trabajador al coordinador.
El coordinador lo registra en su lista de trabajadores
Algoritmos para completar (commit) transacciones
Algoritmos de completar (commit)
Cuando el coordinador recibe un requerimiento completar de una transaccin, debe asegurar:Atomicidad: todos los nodos completan cambios o ninguno lo hace; cualquier otra transaccin percibe los cambios en todos los nodos o en ninguno
Aislamiento: los efectos de la transaccin no son visibles hasta que todos los nodos hayan tomado la decisin (irrevocable) de completar o abortar
Protocolo Completar en Dos Fases (C2F, Two-phase-commit)
Durante progreso de transaccin, no hay comunicacin entre coordinador y trabajadores (excepto AgregarServidor y NuevoServidor)
Requerimiento completar o abortar del cliente, llega al coordinador
Si es abortar, el coordinador lo informa inmediatamente a todos los trabajadores
Si es completar, se aplica protocolo C2F
Protocolo C2F
Mquina de estados finitos del coordinador (a) y de los trabajadores (b)
Protocolo C2F: acciones del coordinador (1/2)
Protocolo C2F: acciones del coordinador (2/2)
Protocolo C2F: acciones del trabajador
C2F: esperas acotadas para tolerancia a fallas
Se usan temporizadores para acotar espera en estados Espera, Completar y Abortar del coordinador. Expira (timeout) en el estado de Espera: aborta, escribe en bitcora,
enva mensaje abortar_global a todos
Expira tiempo en estados Completar o Abortar:enva mensaje completar_global o abortar_global, resp., a trabajadores que no han respondido
espera por confirmacin
C2F: espera acotada en trabajador
Estados Inicial o Listo
Expira en estado Inicial: decide abortar. Si el mensaje solicita_voto (vote_request) llega despus, trabajador enva un voto_abortar o lo ignora.
Expira en estado Listo: se queda bloqueado esperando
Paradigmas de comunicacin para el C2F
1234N
CFase 1Fase 2
C2F centralizado
C2F lineal
Solicita voto
voto
C/A_global
C/A
voto
voto
voto
C/A_gl
C/A_gl
C/A_gl
C/A_gl
Paradigmas de comunicacin: C2F distribuido
El C/A_g (Commit/Abort_global) es decisin de cada participante de acuerdo a los votos recibidos
Se elimina fase 2
Lineal y distribuidos requieren conocer ids de todos los participantes
Solicita voto
C/A_ voto
C/A_g
Anlisis de C2F
El protocolo C2F puede ocasionar retrasos a los participantes en estado incierto (preparado para completar)Cuando coordinador falla y no puede responder a peticiones de dameDecisin.
Lo mismo ocurre si es cooperativo y la pregunta va a participantes en estado incierto
Solucin: Protocolo Completar en Tres fases (C3F)
Completar en Tres Fases (C3F Three-Phase-Commit)
Los estados del coordinador y de cada participante satisfacen las siguientes dos condiciones:
No hay estado del cual sea posible hacer una transicin directamente al estado completar o abortar
No hay estado en el cual no sea posible tomar una decisin final, y del cual pueda ser realizada una transicin al estado completar
Completar en Tres Fases (C3F Three-Phase-Commit)
Mquina de estados finitos del coordinador (a) y de los trabajadores (b) en C3F
Control de Concurrencia
Control de Concurrencia
Resolver operaciones conflictivas: cuando sus efectos combinados dependen del orden en el cual fueron ejecutadas
Para dos transacciones, son conflictivas cualquier combinacin que tenga escritura/lectura o escritura/escritura
Si hay operaciones conflictivas es necesario serializarlas para asegurar la consistencia de los datos despus de su ejecucin
Control de concurrencia
Las Operaciones conflictivas derivan en 2 problemas:Actualizaciones perdidas
Transaccin T Transaccin Ubalance=b.getBalance() balance=b.getBalance()b.setBalance(balance*1.1) b.setBalance(balance*1.1)
Recuperaciones inconsistentes
Transaccin V Transaccin Wa.retirar(100) unasucursal.totalSucursal(a,b)b.deposita(100))
Solucin: Equivalencia Secuencial =>Control de concurrencia
EjecucinT Ubalance=200$balance=200$balance=220$balance=220$
Balance debi ser 200+20+22=242Ejecucin; a=200$ , b=200$V Wa=200$-100$ lee a=100$lee b=200$b=200$+100$Total=300$Segn la ejecucin el total es 300$. Debi ser 400$
Transacciones abortadas
Cuando una transaccin aborta, puede generar dos problemas:Lecturas sucias
Escrituras prematuras
Lecturas sucias
Transaccin T Transaccin U
a.getBalance() (100$)a.depositar(10) (110$) a.getBalance() (110$)a.deposita(20) (130$)completarabortaU tom el valor 110$ que ahora no es vlido
Recuperacin de lecturas sucias
Estrategia para recuperacin: retrasar accin completar de U hasta que T finalice
Esto puede generar Abortos en Cascada si T aborta, U debe abortar tambin
Escrituras prematuras
Se pierden actualizaciones.Ej: dos transacciones A y B sobre una cuenta. Saldo inicial 100Bs. A pone balance en 105, B en 110, son secuencialmente equivalentes. B ejecuta despus de A. Si B aborta y despus A, coloca 100 en balance (correcto).
Si A aborta y despus B, coloca 105 en balance (incorrecto)
Estrategia para recuperacinRetrasar escrituras hasta el momento de completar
Se llama escritura prematura, porque se alteran los datos antes que la transaccion termine, y por tanto no se sabe si va a culminar con exito o no. Si otra transaccion (B) lee el dato, si aborta (despues de A), colocara el valor original que leyo en espacio permanente. Pero si A aborta, ese valor es incorrecto.
Ejecucin estricta
Se retrasa lectura/escritura de un objeto hasta que todas las transacciones que escribieron el objeto han sido completadas o abortadas
La ejecucin estricta de las transacciones evita tanto lecturas sucias como escrituras prematuras (aislamiento)
Algoritmos de control de concurrencia
Tres estrategiasUsando bloqueo (locking)
Optimista
Por marcas de tiempo (timestamp)
Control de concurrencia: Bloqueo
Cuando se requiere leer/escribir objeto en una transaccin, se bloquea objeto hasta que culmine transaccin (completar)Si otra transaccin desea acceder el objeto, debe esperar a que se desbloquee
Los bloqueos (locks) son adquiridos/liberados por administrador de transacciones (transparente al programador)
Administrador puede ser centralizado o local a cada mquina
Granularidad del Bloqueo
Se refiere al tamao del objeto que se est bloqueando:A mayor granularidad, ms pequeo (grano ms fino) es objeto
Bloqueo puede ser a nivel de dato (mayor granularidad), pgina, archivo, BD (menor)
Paralelismo/concurrencia, y complejidad de sistema, son directamente proporcionales a granularidad
Bloqueo: mejoras
Bloqueos diferenciados para escritura y para lectura permiten ms concurrencia
Si varias transacciones requieren objeto para lectura y luego escritura, se otorga bloqueo de (slo) lectura a todas, hasta que alguna requiera escribir; sta solicita bloqueo de escritura (promocin de bloqueo lectura a escritura), para lo cual debe esperar que todas las dems liberen bloqueo de lectura
Compatibilidad de bloqueos
Determina cmo manejar los bloqueos solicitados sobre un objeto, sobre el cual existe un bloqueo activo
Depende de los tipos de bloqueo solicitados y del bloqueo activo sobre el objeto
Bloqueo activoBloqueo solicitado
NingunoLectura OK Escritura OK
LecturaLectura OK Escritura ESPERA
EscrituraLectura ESPERA Escritura ESPERA
Problemas resueltos usando bloqueo
Recuperaciones inconsistentes El bloqueo permite ordenar los accesos conflictivos (en el ejemplo, evitando que W lea balance en b antes que V lo actualice)
Prdida de actualizacionessi dos transacciones desean leer el mismo dato y luego modificarlo, la solicitud de bloqueo de escritura (promocin lectura a escritura) de ambas forzar su ordenamiento
Equivalencia secuencial
Transaccin T Transaccin U
bal=b.obtenBalance() (200)b.ponBalance(bal*1.1) (220)bal=b.obtentBalance() (220)b.ponBalance(bal*1.1) (242)a.extrae(bal/10) (80)c.extrae(bal/10) (278)
Transacciones deben planificarse para que efectos sean secuencialmente equivalentes, regulando solicitud/liberacin de recursos
Bloqueo en dos fases
Equivalencia Secuencial requiere que los accesos conflictivos a objetos se hagan en el mismo ordenSolucin: impedir que se pidan objetos despus de liberar
Fase de Obtencin: Transaccin trata de obtener bloqueos necesitados. Si no es posible obtenerlos todos, entonces espera
Fase de Liberacin: Comienza cuando transaccin libera algn bloqueo. A partir de ese momento, no podr solicitar ningn otro; si lo hace, ser abortada
Ejemplo bloqueo 2 fases
Transaccin T Transaccin U
abreTransaccionbal=b.obtenBalance() (bloquea B)b.ponBalance(bal*1.1) abreTransacciona.extrae(bal/10) (bloquea A) bal=b.obtentBalance() (espera)CierraTransaccion (desbloquea A,B)Bloquea B b.ponBalance(bal*1.1)c.extrae(bal/10) (bloquea C)cierraTransaccion (desbloq.B,C)
Desventaja de Bloqueo en dos fases
Si una transaccin en fase de liberacin haba desbloqueado algunos objetos que entonces son accedidos por otras antes que la primera haga completar, y sta decide abortar, entonces TODAS deben abortar
Bloqueo en dos fases estricto
La fase de liberacin se realiza slo cuando la transaccin hace completar
Ventaja: se evitan abortos en cascada (conjunto de transacciones relacionadas con los objetos bloqueados que deben abortar)
Desventajas:Degrada nivel de paralelismo
Permanece la posibilidad de interbloqueo
Representa alto costo de mantenimiento
Bloqueo en dos fases
Bloqueo en dos fases
Nmero de bloqueos
Tiempo
Fase de crecimientoFase de liberacin
Nmero de bloqueos
Tiempo
Fase de crecimientoFase de liberacin
Se liberantodos losbloqueos
Bloqueo en dos fases estricto
Inconvenientes del uso de bloqueo
Sobrecarga. Incluso en lectura, cuando no es necesario
Posibilidad de interbloqueo
Prdida de concurrenciaPara impedir abortos en cascada, los bloqueos no pueden ser liberados hasta el final de la transaccin
Control de concurrencia:
Algoritmo Optimista
Se basa en la premisa de que los conflictos son poco frecuentes, por lo que es mejor no hacer nada sino actuar cuando ocurran
Modificaciones se hacen sobre espacios privadosSe lleva registro de los datos que han sido modificados/accedidos
Al momento de completar, se verifica que los espacios privados sean vlidos; sino, aborta
Asigna nmero de secuencia a transacciones
Fases de Algoritmo Optimista
Tres fases: trabajo, validacin y escritura
TrabajoToda lectura se ejecuta inmediatamente sobre ltima versin completada del dato
Las escrituras crean versiones tentativas
Se mantiene conjunto de lectura (datos ledos) y conjunto de escritura (versiones tentativas de datos)
Fases de Algoritmo Optimista
ValidacinAnte solicitud de completar, se valida si transaccin realiz operaciones conflictivas con otras transacciones
EscrituraSi transaccin es validada, todos los cambios sobre espacios privados se respaldan en espacio definitivo
Fase de Validacin
Ante cierraTransaccion de Tv, pasa a fase de validacin; se asigna a cada transaccin un nmero de secuencia
Validacin se basa en tres reglas (ver abajo, iTc (requiere Tc>=max(Tcompletar_esc del dato)
LecturaEscritura3. Tc no debe leer dato escrito por Ti>Tc Requiere Tc>Tcompletar_esc
Algoritmos por Marcas de Tiempo
Para saber cuando escritura es vlida, se aplica el siguiente algoritmo (reglas de escritura 1 y 2)
Sea Tc una transaccin que desea escribir sobre el objeto D.if ((Tc >= Max (Tlect en D)) && (Tc > Tcompletar_esc en D)) Proceder con escritura sobre una versin tentativa nueva;else // escritura muy tarde Abortar Tc;
Alg Marcas Tiempo: reglas escritura
despusantes
T3
despusantes
T2T2T3
despusantes
T3T4T4
despusantes
T3 Aborta
VersintentativaVersincompletadaa) T3 escritura
b) T3 escritura
d) T3 escritura
c) T3 escritura
Tiempo
Alg. Marcas de Tiempo: validacin de regla de lectura: Tc lee(D)
if (Tc > Tcompletar_esc en D) {Dselec con Max (Tescritura