Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-Atomicidad. Una transacción debe ser todo o nada. En otras palabras, o finaliza
correctamente, y los efectos de todas sus operaciones son registrados, o si falla es
abortada y no tienen ningún efecto.
-Durabilidad. Después de que una transacción ha finalizado con éxito, todos sus efectos
son guardados en un almacenamiento permanente, de forma que los datos guardados
sobrevivirán incluso en caso de ruptura del servidor.
En algunas situaciones, los clientes necesitan realizar una serie de invocaciones sobre un objeto
que deben ser atómicas en el sentido de:
1. Las invocaciones no interfieren con la actividad de otros clientes sobre el mismo
objeto.
2. Todas las invocaciones deber ser completadas con éxito o ninguna debe ejecutarse si
el servidor falla.
2. Control de concurrencia
El objetivo de cualquier servidor que soporta transacciones es maximizar la concurrencia. Para
ello, se debe permitir que se ejecuten concurrentemente transacciones como si el efecto de
ellas fuera el mismo que si se ejecutaran secuencialmente, es decir, si fueran secuencialmente
equivalentes. Solo hay problemas en operaciones conflictivas, en las cuales el efecto
combinado depende del orden de ejecución.
1
las transacciones T y U debieran hacer incrementar el balance de la cuenta B en un 10%
dos veces, por lo que el valor final será 242$.
Consideremos ahora los efectos de permitir que las transacciones T y U se ejecuten
concurrentemente, como en la figura siguiente.
2
2.1 Equivalencia secuencial.
El uso de la equivalencia secuencial como un criterio para la ejecución concurrente correcta
previene de la ocurrencia de actualizaciones pérdidas y lecturas inconsistentes.
La actualización pérdida ocurren cuando una transacción utilizar un valor obsoleto para
fijar un nuevo estado. Esto se resuelve si la transacción U no accede al recurso hasta que
T haya terminado con él.
Vamos a ver dos problemas asociados con las transacciones abortadas conocidos como lecturas
sucias y escrituras prematuras.
3
Si una transacción (como U) ha finalizado después de que visto los efectos de una
transacción que posteriormente ha sido abortada, la situación no es recuperable. Para
asegurar que tales situaciones no se plantean, cualquier transacción que esté en peligro
de tener una lectura sucia retrasa su commit hasta la terminación de todas las
transacciones cuyos efectos se hayan observado. Sin embargo, esto puede provocar
cascadas de aborts.
Para evitar las cascadas de aborts, solo se permite a las transacciones leer objetos que
fueron escritos por transacciones consumadas. Para asegurar que esto es así, debe
retrasarse cualquier operación de lectura hasta que haya sido comprometida o abortada
cualquier otra transacción que haya realizado una operación de escritura sobre el mismo
objeto.
4
Ahora consideremos el caso de que U se compromete y después T aborta. El balance
debería estar a 110$, pero la “imagen anterior” de la escritura es 100$, por lo que
conseguimos el balance incorrecto de 100$. De forma similar, si T aborta y después U
aborta, la imagen anterior de la escritura de U es 105$, por lo que conseguimos el
balance erróneo de 105$, ya que el balance debería ser 100$.
-Bloqueos. Se utilizan para ordenar transacciones que acceden a los mismos objetos de
acuerdo con el orden de llegada de sus operaciones sobre dichos objetos.
-Control optimista de concurrencia. Permite a las transacciones avanzar hasta que están
dispuestas para consumarse, que es cuando se realiza una comprobación para ver si se
han efectuado operaciones conflictivas con los objetos.
-Ordenación con marcas de tiempo. La ordenación por marca de tiempo utiliza dichas
marcas para ordenar las transacciones que acceden a los mismos objetos de acuerdo
con los instantes de comienzo.
5
4.1 Bloqueos
Las transacciones deben planificarse de forma que sus efectos sobre datos compartidos sean
secuencialmente equivalentes. Un servidor puede conseguir la equivalencia secuencial de las
transacciones secuenciando el acceso a los objetos.
Bloqueos exclusivos.
La siguiente figura ilustra el uso de bloqueos exclusivos. En este ejemplo, se supone que cuando
las transacciones T y U comienzan los balances de las cuentas A, B y C no están todavía
bloqueados. Cuando la transacción T va a utilizar la cuenta B, B se bloquea para T.
Consecuentemente, cuando la transacción U va a utilizar B ésta está todavía bloqueada para T,
y la transacción U espera. Cuando se consuma la transacción T, B es desbloqueado, después de
lo cual se reanuda la transacción U. Hay que tener en cuenta que sí, por ejemplo, T ha liberado
el bloqueo en B entre sus operaciones obtenBalance y ponBalance, la operación obténBalance
de la transacción U puede solaparse entre ellas.
La equivalencia secuencial precisa que todos los accesos de una transacción a un objeto
particular sean secuenciados con respecto a los accesos por otras transacciones. Todos los pares
de operaciones conflictivas de dos transacciones deberían ser ejecutados en el mismo orden.
Para asegurar esto, no está permitido a una transacción ningún nuevo bloqueo después que
ha liberado uno. Este hecho delimita dos fases:
El inconveniente de los bloqueos en dos fases es que no previenen de lecturas sucias y escrituras
prematuras.
6
Bloqueo estricto en dos fases.
Los bloqueos estrictos en dos fases son una extensión de los bloques en dos fases de forma que,
para hacer cumplir con las escrituras prematuras y lecturas sucias, se mantienen todos los
bloqueos aplicados durante el progreso de una transacción hasta que ésta se consuma o se
aborta.
Interbloqueos.
-Prevención de interbloqueos.
-El mantenimiento de los bloqueos plantea una sobrecarga, incluso en las transacciones
sólo de lectura.
7
-Para impedir abortos en cascada, los bloqueos no pueden ser liberados hasta el final de
la transacción. Esto puede reducir significativamente el potencial de concurrencia.
La aproximación alternativa propuesta por Kung y Robinson es optimista porque se basa en la
observación de que, en la mayoría de las aplicaciones, la probabilidad de que dos transacciones
concurrentes accedan al mismo objeto es baja.
Por este motivo, se permite que las transacciones procedan como si no hubiera posibilidad de
conflicto con otras transacciones hasta que el cliente complete su tarea y publique una petición
cierraTransacción. Cuando aparece un conflicto, habitualmente se abortará alguna transacción
y se necesitará reiniciar el cliente. Cada transacción se ejecuta en las siguientes tres fases.
-Fase de trabajo. Durante esta fase, cada transición tiene una versión tentativa de cada
uno de los objetos que actualiza. El empleo de las versiones tentativas permite a las
transacciones abortar, sin efecto ninguno sobre los objetos.
Control de concurrencia optimista. Es ideal cuando hay pocos conflictos, pero hay
que tener cuidado porque mucho trabajo puede ser hecho en balde.
8
TEMA 8.2: Transacciones distribuidas
1. Introducción
Utilizamos el término de transacción distribuida para hacer referencia a una transacción que
accede a objetos gestionados por diferentes servidores.
9
Como ejemplo considere una transacción distribuida en la cual un cliente transfiere diez dólares
desde una cuenta A a otra cuenta C, y después transfiere veinte dólares desde B hasta D. Las
cuentas A y B están en servidores separados X e Y, y las cuentas C y D, están en el servidor Z. Si
la transacción se estructura como un conjunto de cuatro transacciones anidadas, las cuatro
peticiones (dos depósitos y dos extracciones) pueden ejecutarse en paralelo, y el efecto global
puede conseguir con mejor rendimiento que el de una transacción simple en la que las cuatro
operaciones se invocan secuencialmente.
Cada uno de los servidores que gestione un objeto al que accede la transacción distribuida es un
participante en la transacción y proporciona un objeto que llamaremos participante. Cada
participante es responsable de seguir la pista de todos los objetos recuperables en el servidor
implicado en la transacción. Durante el progreso de una transacción, el coordinador registra una
lista de referencias de participantes, y cada participante registra una referencia hacia el
coordinador. El participante invoca join() del coordinador la primera vez. Además, cada
participante puede abortar la transacción.
10
3. Protocolos de consumación.
Un protocolo de consumación atómica es un procedimiento utilizado por un conjunto de
servidores involucrados en una transacción distribuida, que permite que los servidores lleguen
a una decisión conjunta sobre si una transacción debe ser consumada (comprometida) o debe
ser abortada.
-En la segunda fase del protocolo, todo participante en la transacción lleva a cabo la
decisión conjunta. Si alguno de los participantes vota por abortar, entonces la
decisión ha de ser abortar. Si todos los participantes votan consumar, entonces la
decisión es de consumar la transacción.
11
La siguiente figura muestra un resumen de las operaciones utilizadas en el protocolo
de consumación en dos fases.
4.1 Bloqueos
En una transacción distribuida, los bloqueos sobre un objeto se mantienen localmente. El gestor
de bloqueos locales puede decidir la concesión de un bloqueo o hacer que la transacción espere.
Sin embargo, no puede liberar ningún bloqueo hasta que sepa que la transacción se ha
consumado o ha abortado en todos los servidores involucrados en dicha transacción. Una
transacción abortada libera sus bloqueos tras la primera fase del Protocolo de Consumación en
dos fases.
Dado que los gestores de bloqueos en distintos servidores fijan sus bloqueos con independencia
de los otros, es posible que distintos servidores impongan ordenamientos distintos sobre las
transacciones. Estas ordenaciones distintas pueden llevar a situaciones de interbloqueo
distribuido.
12
4.2 Ordenación.
En las transacciones distribuidas, se requiere que el primer coordinador al que accede la
transacción proporcione al cliente una marca temporal para la transacción globalmente única.
La marca temporal de la transacción se pasa al coordinador de cada servidor sobre cuyos objetos
se realice una operación en la transacción.
Antes se recomendaba una simplificación del protocolo de validación que establece una regla
por la que sólo una transacción puede realizar, cada vez, las fases de validación y actualización.
Sin embargo, en una transacción distribuida, se puede provocar un interbloqueo de
consumación.
13
5. Interbloqueos distribuidos.
Los servidores deben o bien evitar que se produzcan interbloqueos, o bien detectarlos y
resolverlos. La utilización de timeouts para resolver posibles interbloqueos es una aproximación
tosca, ya que es difícil elegir un intervalo de timeout apropiado y las transacciones podrían ser
abortadas de forma innecesaria.
14