Commit de tres fases
En redes de ordenadores y Base de datos, el protocolo commit de tres fases (3PC) es un algoritmo distribuido que permite a todos los nodos de un sistema distribuido ponerse de acuerdo para hacer commit a una transacción. Al contrario del protocolo de commit de dos fases (2PC), el 3PC no es bloqueante. Específicamente, 3PC sitúa un límite superior de la cantidad de tiempo requerido antes de que una transacción haga el commit o aborte. Esta propiedad asegura que si una transacción dada está intentando hacer commit vía 3PC y mantiene algún recurso bloqueado (locking), puede liberar los bloqueos después del límite de tiempo (timeout).El protocolo 3PC fue originalmente descrito por Dale Skeen y Michael Stonebraker en su artículo ""A Formal Model of Crash Recovery in a Distributed System."" En este trabajo, ellos modelaron 2PC como un sistema de ""máquina de estado finito no determinista"" y probaron que no es resistente a un fallo aleatorio de un único nodo. La observación básica es que en 2PC, mientras un nodo está en el estado de ""preparado para commit"", el otro puede estar tanto en el estado de ""commit"" como en el de ""abortar"". A partir de este análisis, desarrollaron 3PC para evitar dichos estados y por tanto ser resistente a dichos fallos.