En el procesamiento de transacciones , bases de datos y redes de computadoras , el protocolo de compromiso de dos fases ( 2PC , tupac ) es un tipo de protocolo de compromiso atómico (ACP). Es un algoritmo distribuido que coordina todos los procesos que participan en una transacción atómica distribuida sobre si confirmar o abortar (revertir) la transacción. Este protocolo (un tipo especializado de protocolo de consenso ) logra su objetivo incluso en muchos casos de falla temporal del sistema (que involucra fallas de proceso, nodo de red, comunicación, etc.) y, por lo tanto, se usa ampliamente. [1] [2] [3] Sin embargo, no es resistente a todas las configuraciones de falla posibles y, en casos raros, se necesita intervención manual para remediar un resultado. Para adaptarse a la recuperación de una falla (automática en la mayoría de los casos), los participantes del protocolo utilizan el registro de los estados del protocolo. Los procedimientos de recuperación del protocolo utilizan los registros de registro, que normalmente tardan en generarse pero sobreviven a los fallos . Existen muchas variantes de protocolo que difieren principalmente en las estrategias de registro y los mecanismos de recuperación. Aunque generalmente están destinados a usarse con poca frecuencia, los procedimientos de recuperación constituyen una parte sustancial del protocolo, debido a que el protocolo debe considerar y respaldar muchos escenarios de falla posibles.
En una "ejecución normal" de cualquier transacción distribuida (es decir, cuando no se produce ningún fallo, que suele ser la situación más frecuente), el protocolo consta de dos fases:
El protocolo de confirmación de dos fases (2PC) no debe confundirse con el protocolo de bloqueo de dos fases (2PL), un protocolo de control de concurrencia .
El protocolo funciona de la siguiente manera: un nodo es el coordinador designado, que es el sitio maestro, y el resto de los nodos de la red son designados participantes. El protocolo asume que:
La última suposición no es demasiado restrictiva, ya que la comunicación de red normalmente puede redirigirse. Los dos primeros supuestos son mucho más sólidos; Si un nodo queda totalmente destruido, se pueden perder datos.
El protocolo lo inicia el coordinador una vez que se ha alcanzado el último paso de la transacción. A continuación, los participantes responden con un mensaje de acuerdo o un mensaje de cancelación dependiendo de si la transacción se ha procesado correctamente en el participante.
Si el coordinador recibió un mensaje de acuerdo de todos los participantes durante la fase de solicitud de confirmación:
Si algún participante vota No durante la fase de solicitud de confirmación (o expira el tiempo de espera del coordinador):
Coordinador Participante CONSULTA PARA COMPROMETER --------------------------------> VOTAR SÍ/NO preparar*/abortar* <-------------------------------confirmar*/abortar* COMMIT/ROLLBACK --------------------------------> RECONOCIMIENTO confirmar*/abortar* <-------------------------------- fin
Un * junto al tipo de registro significa que el registro está obligado a almacenarse de forma estable. [4]
En muchos casos el protocolo 2PC se distribuye en una red informática. Se distribuye fácilmente mediante la implementación de múltiples componentes 2PC dedicados similares entre sí, generalmente denominados administradores de transacciones (TM; también conocidos como agentes 2PC o monitores de procesamiento de transacciones), que llevan a cabo la ejecución del protocolo para cada transacción (por ejemplo, The Open Group ) . s X/Abrir XA ). En las bases de datos involucradas con una transacción distribuida, los participantes, tanto el coordinador como los participantes, se registran para cerrar TM (que generalmente residen en los mismos nodos de red respectivos que los participantes) para terminar esa transacción usando 2PC. Cada transacción distribuida tiene un conjunto ad hoc de TM, las TM en las que se registran los participantes de la transacción. Existe un líder, el TM coordinador, para cada transacción para coordinar 2PC, generalmente el TM de la base de datos del coordinador. Sin embargo, la función de coordinador se puede transferir a otra TM por motivos de rendimiento o confiabilidad. En lugar de intercambiar mensajes de 2PC entre ellos, los participantes intercambian los mensajes con sus respectivas MT. Las TM relevantes se comunican entre sí para ejecutar el esquema de protocolo 2PC anterior, "que representa" a los respectivos participantes, para finalizar esa transacción. Con esta arquitectura, el protocolo está completamente distribuido (no necesita ningún componente de procesamiento central ni estructura de datos) y se amplía con la cantidad de nodos de red (tamaño de la red) de manera efectiva.
Esta arquitectura común también es eficaz para la distribución de otros protocolos de compromiso atómico además de 2PC, ya que todos estos protocolos utilizan el mismo mecanismo de votación y propagación de resultados a los participantes del protocolo. [1] [2]
Se han realizado investigaciones en bases de datos sobre formas de obtener la mayoría de los beneficios del protocolo de compromiso de dos fases y al mismo tiempo reducir los costos mediante optimizaciones del protocolo [1] [2] [3] y ahorro de operaciones de protocolo bajo ciertos supuestos de comportamiento del sistema.
El aborto presunto o el compromiso presunto son optimizaciones comunes. [2] [3] [5] Una suposición sobre el resultado de las transacciones, ya sea confirmada o abortada, puede guardar tanto los mensajes como las operaciones de registro de los participantes durante la ejecución del protocolo 2PC. Por ejemplo, cuando se presume un aborto, si durante la recuperación del sistema de una falla el procedimiento de recuperación no encuentra evidencia registrada de la confirmación de alguna transacción, entonces se supone que la transacción ha sido abortada y actúa en consecuencia. Esto significa que no importa si los abortos se registran o no, y dicho registro se puede guardar bajo esta suposición. Normalmente se paga una penalización de operaciones adicionales durante la recuperación de una falla, según el tipo de optimización. Por lo tanto, la mejor variante de optimización, si la hay, se elige de acuerdo con las estadísticas de fallas y resultados de las transacciones.
El protocolo Tree 2PC [2] (también llamado Nested 2PC o Recursive 2PC) es una variante común de 2PC en una red informática , que utiliza mejor la infraestructura de comunicación subyacente. Los participantes en una transacción distribuida normalmente se invocan en un orden que define una estructura de árbol, el árbol de invocación, donde los participantes son los nodos y los bordes son las invocaciones (enlaces de comunicación). El mismo árbol se utiliza habitualmente para completar la transacción mediante un protocolo 2PC, pero, en principio, también se puede utilizar otro árbol de comunicación para esto. En un árbol 2PC el coordinador es considerado la raíz ("cima") de un árbol de comunicación (árbol invertido), mientras que los participantes son los demás nodos. El coordinador puede ser el nodo que originó la transacción (invoca de forma recursiva (transitiva) a los demás participantes), pero también otro nodo en el mismo árbol puede asumir el rol de coordinador. Los mensajes 2PC del coordinador se propagan "hacia abajo" en el árbol, mientras que los mensajes al coordinador son "recopilados" por un participante de todos los participantes debajo de él, antes de enviar el mensaje apropiado "arriba" en el árbol (excepto un mensaje de cancelación, que se propaga "hacia arriba" inmediatamente después de recibirlo o si el participante actual inicia el aborto).
El protocolo de compromiso dinámico de dos fases (Compromiso dinámico de dos fases, D2PC) [2] [6] es una variante del Árbol 2PC sin un coordinador predeterminado. Incluye varias optimizaciones que se han propuesto anteriormente. Los mensajes de acuerdo (votos Sí) comienzan a propagarse desde todas las hojas, cada hoja cuando completa sus tareas en nombre de la transacción (estando lista). Un nodo intermedio (no hoja) envía listo cuando un mensaje de acuerdo al último (único) nodo vecino del cual aún no se ha recibido el mensaje de acuerdo. El coordinador se determina dinámicamente mediante la carrera de mensajes de acuerdo sobre el árbol de transacciones, en el lugar donde chocan. Chocan en un nodo del árbol de transacciones, para ser el coordinador o en el borde del árbol. En el último caso, uno de los dos nodos de los bordes se elige como coordinador (cualquier nodo). D2PC es óptimo en el tiempo (entre todas las instancias de un árbol de transacciones específico y cualquier implementación específica del protocolo Tree 2PC; todas las instancias tienen el mismo árbol; cada instancia tiene un nodo diferente como coordinador): al elegir un coordinador óptimo, D2PC compromete tanto al coordinador y cada participante en el mínimo tiempo posible, permitiendo la liberación más temprana posible de los recursos bloqueados en cada participante de la transacción (nodo de árbol).