Saltar al contenido

2PC (two-phase commit) & 3PC (three-phase commit protocol)

Compartir en:

2PC y 3PC son protocolos de consenso distribuidos diseñados para poner de acuerdo a N nodos de la validez de un commit o una transacción. La transacción se consensúa por todos los nodos o no es válida para ninguno. De esta manera se puede mantener una coherencia entre múltiples puntos distribuidos que ejecutan un mismo sistema.

2PC (two-phase commit)

2PC (two-phase commit) es un protocolo de bloqueo que busca el consenso distribuido de los N nodos de un sistema para consolidar una transacción. En decir, el protocolo busca que todos los nodos del sistema realicen un commit o aborten la transacción.
El algoritmo se basa en la existencia de un nodo que ejerce de coordinador y N nodos que se les conocen como participantes, y consta de dos fases para consolidar las transacciones:

Fase 1: Fase de votación:

  1. El propio coordinador envía un mensaje de Vote_Commit? a cada nodo participante
  2. Los N participantes en la transacción realizan la operación y comprueban que es posible realizarla, bloqueando el recurso.
  3. Cada participante envía un mensaje de votación con el resultado de sus pruebas, si estas fueron satisfactorias envía un SI o un NO si hubo algún problema.

Fase 2: Fase de finalización:

  1. En coordinador envía un mensaje de commit si la votación ha sido afirmativa o de rollback si ha fallado alguno de los nodos.
  2. Cada participante opera según el mensaje del coordinador (commit o rollback) y libera el recurso.
  3. Una vez finalizada la transacción envía un mensaje al coordinador del éxito de la transacción.
  4. El coordinador completa el commit o el rolback cuando ha recibido todas las respuestas y desbloquea el recurso.

Dado que se necesita la comunicación coordinador-participante en 3 ocasiones a medida que aumenta el número de nodos, se necesitan 3N mensajes por cada transacción, esto penaliza el rendimiento 3N veces en cuanto a rendimiento y requerimientos de red.

Esta ratio tiene una escalabilidad aceptable y el protocolo sé adapta bien al crecimiento, pero hay que tener en cuenta que conforme crece el sistema, crecen las posibilidades de fallos en los envíos y, por tanto, es probable que la ratio sea mayor en un entorno real.

En cuanto a la tolerancia a fallos, el sistema está preparado para errores temporales de los nodos o incluso del coordinador (se presupone que este no puede fallar) pero tiene un gran problema, ya que es un protocolo de bloqueo. Si uno de los nodos se cae permanentemente, es posible que recursos bloqueados nunca lleguen a desbloquearse, planteando serios problemas a los sistemas a los que sirven.

3PC (two-phase commit)

En cuanto al protocolo 3PC o three-phase commit protocol, tiene el mismo cometido funcional que 2PC, es decir, alcanzar consensos en transacciones en sistemas distribuidos. La principal diferencia es que 3PC no bloquea las transacciones, utiliza un time out que asegura que todas las transacciones acabaran en un commit o un rollback.

Esta mejora en términos de incertidumbre tiene un coste a nivel de rendimiento, ya que son necesarios 2 mensajes más en cada transacción, es decir que un sistema de N nodos necesita 5N mensajes para una transacción.

Esta mejora en la fiabilidad y tolerancia va en detrimento de su rendimiento a nivel de recursos necesarios de proceso y ancho de banda, pero si tenemos en cuenta que el protocolo no bloquea el mensaje y que la fase de preCommit que se introduce. Brinda al sistema más tolerancia a errores y a fallos de los nodos, ya que el estado puede recuperarse aunque una de las réplicas muera.


Juan Ibero

Inmerso en la Evolución Tecnológica. Ingeniero Informático especializado en la gestión segura de entornos TI e industriales, con un profundo énfasis en seguridad, arquitectura y programación. Siempre aprendiendo, siempre explorando.

Compartir en:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *