Actualmente estoy explorando los peores escenarios de protocolos de confirmación atómica como 2PC y 3PC y estoy atascado en el punto en que no puedo encontrar por qué 3PC puede garantizar la atomicidad. Es decir, ¿cómo garantiza que si la cohorte A se compromete, la cohorte B también se compromete?¿Cómo puede el protocolo de confirmación trifásico (3PC) garantizar la atomicidad?
Aquí está el simplificada 3PC from the Wikipedia article:
Ahora supongamos el siguiente caso:
- dos cohortes participan en la transacción (A y B)
- Ambos hacen su trabajo, a continuación, vote por compromiso
- El coordinador ahora envía mensajes de precomisión ...
- A recibe el mensaje precommit, reconoce, y luego se desconecta durante un largo tiempo
- B no recibe el mensaje precommit (cualquiera que sea la razón que sea) y está todavía en el estado de "incierta"
los resultados:
- coordinador aborta la transacción porque no todos los mensajes fueron precommit Enviados y confirmados con éxito
- Un, que se encuentra en estado precommit, es todavía fuera de línea, por lo tanto el tiempo de espera y comete
- B aborta en todo caso: O bien se queda fuera de línea y el tiempo de espera (causas abortan) o entra en línea y recibe el comando abortar del coordinador
Y ahí lo tienen: Una cohorte comprometida, otra abortada. La transacción está jodida.
¿Qué me falta aquí? En mi entender, si la confirmación automática del tiempo de espera (en el estado de precomisión) se reemplazó por la espera infinita de un comando de coordinador, ese caso debería funcionar bien.
De acuerdo, eso confirma mi tesis. Leeré sobre estos protocolos basados en el quórum. Gracias – AndiDog