Commit de dos fases

El protocolo commit de 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 hacer commit a una transacción. Típicamente es usado en Bases de datos distribuidas. El objetivo del protocolo es que todos los nodos realicen 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 commit, 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:[1]

  • 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 el commit envían un mensaje de confirmación al coordinador.

El protocolo asume que:

  • Hay almacenamiento estable en cada nodo con un sistema de log write-ahead (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 re-enrutada normalmente.

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

Other Languages