Commit de dos fases

El protocolo de consolidación en dos fases, confirmación en dos fases[1]​ o commit en dos fases, también conocido por las siglas 2PC (del inglés 2-phase commit), es un protocolo de consenso distribuido que permite a todos los nodos de un sistema distribuido ponerse de acuerdo para consolidar a una transacción. Típicamente es usado en bases de datos distribuidas. El objetivo del protocolo es que todos los nodos realicen un commit de la transacción o la aborten.

Las dos fases del algoritmo son la «fase de petición de commit», en el cual el coordinador intenta preparar a todos los demás, y la «fase de commit» o consolidación, en la cual el coordinador completa las transacciones a todos los demás participantes.

Descripción general

El algoritmo está basado en la existencia de un coordinador (al resto de nodos de la red se les llama participantes) y se divide en dos fases:[2]

  • Fase de preparación de commit, en la cual el coordinador intenta preparar a todos para el commit contactando con todas las réplicas que participan, las cuales contestan si aceptan o abortan la transacción.
  • Fase commit. Cuando todas las réplicas han respondido el coordinador busca los conflictos si los hay.
    • Si se detecta un conflicto en los mensaje enviados por las réplicas o una réplica indica que la transacción tiene que ser abortada, el acuerdo será abortado y el coordinador enviará un mensaje a todas las réplicas para que aborten la transacción.
    • Si no se detectan conflictos entonces el coordinador indica a todos realizar el commit. Después de que todas las réplicas realizan la consolidación, envían un mensaje de confirmación al coordinador.

El protocolo asume que:

  • Hay almacenamiento estable en cada nodo con un sistema de registro de escritura por anticipado (implica que aunque el nodo se caiga estos datos nunca se pierden o corrompen).
  • Los nodos no están siempre caídos. Si alguna réplica o el coordinador falla siempre el sistema falla.
  • Dos nodos cualquiera pueden comunicarse unos con los otros. Esto no es muy restrictivo, ya que la comunicación de redes puede ser reenrutada normalmente.

Las primeras dos suposiciones son fuertes ya que si un nodo está totalmente destruido se pone en riesgo estas suposiciones.