transacciones distribuidas

Anuncio
ITESM
Campus Cd. De México
Bases de datos Distribuidas
TRANSACCIONES
DISTRIBUIDAS
Profesor
Dr. Fco. Javier Cartujano E.
TRANSACCIONES DISTRIBUIDAS
Una transacción distribuida es aquella
que involucra algún proceso en distintos
sitios de la red. Llamaremos a estos
procesos los agentes de la transacción,
entonces una transacción distribuida
esta compuesta por varios agentes.
Para llevar a cabo una transacción
distribuida los agentes tienen que
comunicarse a través de mensajes en la
red y se debe garantizar la atomicidad
de la transacción.
En una transacción distribuida
se tiene lo siguiente:
1.- Existe un agente raíz que inicia toda
la transacción, así que cuando el usuario
requiere la ejecución de una aplicación
distribuida el agente raíz es iniciado; el
sitio del agente raíz es llamado el sitio
origen de la transacción.
2.-El agente raíz tiene la responsabilidad
de asegurar BEGIN-TRANSACTION,
COMMIT O ROLLBACK de toda la
transacción distribuida.
UN EJEMPLO DE TRANSACCION DISTRIBUIDA
AGENTE RAÍZ
LEE ($CANT,$DE_CUENTA,$A_CUENTA)
BEGIN_TRANSACTION
SELECT AMOUNT INTO $SALDO_DE
FROM ACCOUNT
WHERE ACCOUNT_NUMBER=$DE_CUENTA;
IF $SALDO_DE < $CANT THEN
ROLLBACK
ELSE
BEGIN
UPDATE ACCOUNT
SET AMOUNT = AMOUNT - $CANT
WHERE ACCOUNT_NUMBER = $DE_CUENTA
CREATE AGENTE1
SEND TO AGENTE1 ($CANT, $A_CUENTA)
COMMIT
END
AGENTE1
RECEIVE FROM AGENTE_RAIZ ($CANTIDAD, $A_CUENTA)
UPDATE ACCOUNT
SET CANTIDAD = CANTIDAD + $CANTIDAD
WHERE ACCOUNT_NUMBER = $A_CUENTA
TRANSACCIÓN DISTRIBUIDA
BEGIN-TRANSACTION
COMMIT
ROLLBACK
AGENTE
RAÍZ
AGENTE
1
AGENTE
2
Sitio 1
Sitio 2
SITIO
ORIGEN
AGENTE
N
Sitio N
Para propósito del manejador de transacciones
distribuidas (DTM), requieren que los LTM se
conformen de la siguiente manera:
1.- Asegurar la atomicidad de su transacción.
2.- Grabar en bitácora por ordenes de la
transacción distribuida.
Para asegurar que todas las acciones de una
transacción distribuida son ejecutadas o no
ejecutadas dos condiciones son necesarias:
a) En cada sitio todas las acciones son
ejecutadas o ninguna es ejecutada.
b) Todos los sitios deberán tomar la misma
decisión respecto al COMMIT o ROLLBACK de la
transición global.
“RECUPERACIÓN DE
TRANSACCIONES DISTRIBUIDAS”
Para realizar la recuperación de transacción
distribuidas se asume que cada sitio tiene su
propio manejador de transacción local (LTM).
Cada agente utiliza de manera local las
primitivas asociadas a sus transacciones.
Podemos
llamar
a
los
agentes
subtransacciones, lo cual origina distinguir las
primitivas BEGIN-TRANSACTION, COMMIT Y
ROLLBACK asociado a la transacción
distribuida de la primitivas locales utilizada por
cada agente en LTM; para poder distinguir
una de las otras, a las ultimas les llamaremos
de ahora en adelante:
LOCAL-BEGIN, LOCAL-COMMIT Y LOCALROLLBACK.
!"#
!"#&'
+
" ( ( )*
/1
5 67!6362&
$ %
" ( ( )*
+,
,
%
" ( ( )*
,
. .
,
.,,/
,
0 , ,
$,
% .
.
2" ( ( )* 34
PROTOCOLO COMMIT DE DOS
FASES
En este protocolo hay un agente que tiene un
papel especial, este agente es llamado el
coordinador (el cual es el agente raíz) y todos
los
demás
agentes
son
llamados
PARTICIPANTES. El COORDINADOR es el
responsable de tomar la decisión de hacer un
COMMIT o un ROLLBACK GLOBAL y cada
PARTICIPANTE es responsable de grabar a sus
bitácoras y bases de datos locales.
La idea básica del protocolo en dos fases
(2pc) es determinar una decisión única para
todos los participantes con respecto a hacer
un COMMIT o un ROLLBACK en todas las
subtransacciones locales. La primera fase de
este protocolo tiene como objetivo lograr una
decisión común, la meta de la segunda fase
es llevar a cabo esta decisión.
El protocolo COMMIT EN DOS
FASES
FASE 1
COORDINADOR
a) Escribe en bitácora el registro
"PREPARE"
{ además tiene todos los identificadores de
todas las subtransacciones
locales }.
PARTICIPANTE
Espera por mensaje "PREPARE"
Si el participante esta listo para COMMIT entonces:
1) Escribe los registros de las
subtransacciones en las bitácoras
2) Escribe "READY" en bitácora.
3) Manda la respuesta de "READY" al
coordinador.
Si_No
1) Escribe "ABORT" o "ROLLBACK" en la bitácora.
2) Manda "ABORT" como respuesta al coordinador.
Fin_Si
b) Manda el mensaje "PREPARE" y activa
TIMEOUT.
FASE 2
COORDINADOR
Espera por respuesta ("READY" o "ABORT")
de todos los participantes o TIMEOUT
EXPIRADO.
Si TIMEOUT expiró o alguna de las respuestas es
"ABORT" entonces
1) escribe "GLOBAL_ABORT" en la bitácora
2) manda "ABORT" a todos los participantes
Si_no {todas las respuestas fueron "READY"}
1) escribe "GLOBAL_COMMIT" en la bitácora.
2) manda "COMMIT" a todos los participantes
Fin_Si
PARTICIPANTE
a) Espera el mensaje de comando ("ABORT"
o "COMMIT").
COORDINADOR
b) Escribe "ABORT" o "COMMIT" en la
bitácora.
a) Espera por "ACK"
participantes.
c) Manda
el
mensaje
de
(reconocimiento) al coordinador.
a) Escribe "COMPLETE" en la bitácora.
d) Ejecuta
el
"COMMIT").
comando
de
todos
los
"ACK“
("ABORT"
o
Descargar