DBMS distribuido: protocolos de compromiso
En un sistema de base de datos local, para confirmar una transacción, el administrador de transacciones solo tiene que transmitir la decisión de comprometerse al administrador de recuperación. Sin embargo, en un sistema distribuido, el administrador de transacciones debe transmitir la decisión de comprometerse a todos los servidores en los diversos sitios donde se está ejecutando la transacción y hacer cumplir la decisión de manera uniforme. Cuando el procesamiento se completa en cada sitio, alcanza el estado de transacción parcialmente comprometida y espera a que todas las demás transacciones alcancen sus estados parcialmente comprometidos. Cuando recibe el mensaje de que todos los sitios están listos para comprometerse, comienza a comprometerse. En un sistema distribuido, todos los sitios se comprometen o ninguno lo hace.
Los diferentes protocolos de compromiso distribuidos son:
- Compromiso de una fase
- Compromiso de dos fases
- Compromiso de tres fases
Compromiso distribuido de una fase
La confirmación distribuida de una fase es el protocolo de confirmación más simple. Consideremos que hay un sitio de control y varios sitios esclavos donde se ejecuta la transacción. Los pasos en la confirmación distribuida son:
Después de que cada esclavo haya completado localmente su transacción, envía un mensaje "HECHO" al sitio de control.
Los esclavos esperan el mensaje "Confirmar" o "Abortar" del sitio de control. Este tiempo de espera se llamawindow of vulnerability.
Cuando el sitio de control recibe el mensaje "DONE" de cada esclavo, toma la decisión de confirmar o abortar. A esto se le llama el punto de compromiso. Luego, envía este mensaje a todos los esclavos.
Al recibir este mensaje, un esclavo se compromete o aborta y luego envía un mensaje de reconocimiento al sitio de control.
Compromiso distribuido de dos fases
La confirmación distribuida de dos fases reduce la vulnerabilidad de los protocolos de confirmación de una fase. Los pasos realizados en las dos fases son los siguientes:
Phase 1: Prepare Phase
Después de que cada esclavo haya completado localmente su transacción, envía un mensaje "HECHO" al sitio de control. Cuando el sitio de control ha recibido el mensaje "DONE" de todos los esclavos, envía un mensaje de "Prepare" a los esclavos.
Los esclavos votan si todavía quieren comprometerse o no. Si un esclavo quiere comprometerse, envía un mensaje "Listo".
Un esclavo que no quiere comprometerse envía un mensaje de "No listo". Esto puede suceder cuando el esclavo tiene transacciones concurrentes en conflicto o hay un tiempo de espera.
Phase 2: Commit/Abort Phase
Después de que el sitio de control haya recibido el mensaje "Listo" de todos los esclavos -
El sitio de control envía un mensaje de "compromiso global" a los esclavos.
Los esclavos aplican la transacción y envían un mensaje "Confirmar ACK" al sitio de control.
Cuando el sitio de control recibe el mensaje "Confirmar ACK" de todos los esclavos, considera que la transacción está comprometida.
Después de que el sitio de control haya recibido el primer mensaje "No listo" de cualquier esclavo -
El sitio de control envía un mensaje de "Cancelación global" a los esclavos.
Los esclavos abortan la transacción y envían un mensaje "Abort ACK" al sitio de control.
Cuando el sitio de control recibe el mensaje "Abort ACK" de todos los esclavos, considera que la transacción se canceló.
Compromiso trifásico distribuido
Los pasos de la confirmación distribuida en tres fases son los siguientes:
Phase 1: Prepare Phase
Los pasos son los mismos que en la confirmación distribuida de dos fases.
Phase 2: Prepare to Commit Phase
- El sitio de control emite un mensaje de transmisión "Ingrese al estado preparado".
- Los sitios esclavos votan "OK" en respuesta.
Phase 3: Commit / Abort Phase
Los pasos son los mismos que los de la confirmación en dos fases, excepto que el mensaje "Confirmar ACK" / "Abortar ACK" no es necesario.