¿Cómo se recupera la confirmación en dos fases del fracaso de un participante?

Aquí hay una situación en la que 2PC no está vivo en presencia de una sola falla.

Si el líder _y_ un participante fallara después de que se haya enviado “preparación” a todos los participantes, pero antes de que se haya enviado cualquier mensaje de “confirmación”, el protocolo se detendrá. Para ver por qué, considere lo que debe hacer un nuevo líder, quizás elegido después de que haya transcurrido un tiempo de espera, con la propuesta en curso. Primero debe pedir a todos los participantes en vivo el resultado de la última propuesta. Suponiendo que todos digan ‘ok to commit’, ¿qué debe hacer el líder sin una respuesta del último participante? El líder no puede saber qué responderá el participante fallido, y sin eso no puede saber si cometer o abortar.

En particular, el líder no puede saber si sucedieron las siguientes cosas: el participante fallido respondió ‘ok para comprometerse’ al líder anterior, y el líder anterior luego envió un mensaje ‘commit’ al participante fallido. Luego, el participante fallido tenía una nueva vista del estado del sistema, y ​​es posible que ya haya comunicado esa vista a un cliente externo (p. Ej., Sirvió una lectura de DB). Entonces el líder no puede abortar de manera segura por defecto.

Pero de manera similar, si el participante fallido iba a abortar, y el antiguo líder ya había comenzado a abortar la propuesta, el nuevo líder no puede comprometer la propuesta pendiente con un argumento similar. Por lo tanto, el nuevo líder no puede tomar una decisión segura sobre qué hacer con el protocolo sobresaliente, por lo que no tiene que hacer nada.

Para agregar a la respuesta de Daniel C Wang, 2PC es un protocolo de confirmación distribuido. No habla de la disponibilidad de cada participante, lo que significa que podría hacer que los participantes individuales tengan HA si lo desea. Por lo general, los participantes mantienen un registro de deshacer y rehacer para recuperarse de los bloqueos. Ahora imagine si los registros de deshacer / rehacer se mantuvieron de forma duradera en 2 lugares (como un modo de espera para cada participante), luego, si un nodo se desactivara, puede conmutar por error inmediatamente al modo de espera que reproduce los registros y se hace cargo como el nuevo activo partícipe. Ahora, si esta conmutación por error ocurriera dentro de la ventana de tiempo de espera configurada en el administrador de transacciones de 2PC, entonces todo está oculto para el administrador (seguro notaría un gran pico de latencia para esta transacción). Curiosamente, en Google’s Spanner parecen estar haciendo 2PC sobre los participantes, que en realidad son conjuntos de Paxos.

Creo que una suposición en un sistema 2PC es que ningún nodo queda indefinidamente disponible. Si lo hace, el sistema puede atascarse y requerir la intervención manual de un operador para avanzar.