En redes informáticas y bases de datos , el protocolo de confirmación en tres fases ( 3PC ) [1] es un algoritmo distribuido que permite que todos los nodos de un sistema distribuido acepten confirmar una transacción . Es una versión más resistente a fallos del protocolo de confirmación en dos fases (2PC).
Un protocolo de confirmación de dos fases no puede recuperarse de manera confiable de una falla tanto del coordinador como de un miembro de la cohorte durante la fase de confirmación . Si solo el coordinador hubiera fallado y ningún miembro de la cohorte hubiera recibido un mensaje de confirmación, se podría inferir con seguridad que no se produjo ninguna confirmación. Sin embargo, si tanto el coordinador como un miembro de la cohorte fallaron, es posible que el miembro de la cohorte que falló haya sido el primero en recibir la notificación y que haya realizado la confirmación. Incluso si se selecciona un nuevo coordinador, no puede proceder con confianza con la operación hasta que haya recibido el acuerdo de todos los miembros de la cohorte y, por lo tanto, debe bloquear hasta que todos los miembros de la cohorte respondan.
El protocolo de confirmación de tres fases elimina este problema al introducir el estado Preparado para confirmar. Si el coordinador falla antes de enviar mensajes preCommit, la cohorte aceptará por unanimidad que la operación se canceló. El coordinador no enviará un mensaje doCommit hasta que todos los miembros de la cohorte hayan confirmado que están Preparados para confirmar . Esto elimina la posibilidad de que algún miembro de la cohorte haya completado la transacción antes de que todos los miembros de la cohorte estuvieran al tanto de la decisión de hacerlo (una ambigüedad que requería un bloqueo indefinido en el protocolo de confirmación de dos fases ).
La fase de pre-confirmación introducida anteriormente ayuda al sistema a recuperarse cuando un participante o tanto el coordinador como un participante fallaron durante la fase de confirmación. Cuando el coordinador de recuperación toma el control después de que el coordinador falló durante una fase de confirmación de confirmación de dos fases , la nueva pre-confirmación resulta útil de la siguiente manera: al consultar a los participantes, si se entera de que algunos nodos están en fase de confirmación, entonces asume que el coordinador anterior antes de la falla tomó la decisión de confirmar. Por lo tanto, puede guiar al protocolo para confirmar. De manera similar, si un participante dice que no había recibido un mensaje PrepareToCommit, entonces el nuevo coordinador puede asumir que el coordinador anterior falló incluso antes de completar la fase PrepareToCommit. Por lo tanto, puede asumir con seguridad que ningún participante ha confirmado los cambios y, por lo tanto, abortar la transacción de manera segura.
Al utilizar el protocolo de confirmación de tres fases original de Skeen, es posible que un quórum se conecte sin poder avanzar (no se trata de una situación de bloqueo; el sistema seguirá avanzando si se resuelve la partición de la red). El E3PC de Keidar y Dolev [2] perfecciona el protocolo de confirmación de tres fases de Skeen y resuelve este problema de una manera que siempre permite que un quórum avance.
La confirmación en tres fases supone una red con un retraso limitado y nodos con tiempos de respuesta limitados; en la mayoría de los sistemas prácticos con un retraso de red ilimitado y pausas de proceso, no puede garantizar la atomicidad. El otro inconveniente del protocolo es que requiere al menos tres viajes de ida y vuelta para completarse, lo que requiere un mínimo de tres tiempos de ida y vuelta (RTT). Esto supone una latencia potencialmente larga para completar cada transacción.