2012-06-26 23 views
16

Entiendo que se realizó una confirmación en tres fases para resolver el problema del "compromiso en dos fases" cuando en la segunda fase el coordinador y la cohorte fallan al mismo tiempo es imposible saber si el coordinador se había decidido un mensaje de compromiso.Confirmación trifásica

Al parecer, el compromiso de tres fases tiene como objetivo resolver este problema añadiendo una fase adicional. ¿Pero no enfrenta el mismo problema durante la tercera fase, si el coordinador y una cohorte fallan?

+0

Para la posteridad, así es como define Wikipedia 3 fase de confirmación: http://en.wikipedia.org/wiki/Three-phase_commit_protocol – Gray

+0

Esta es la esencia del artículo: El El protocolo de confirmación trifásico elimina este problema al introducir el estado Preparado para comprometer. Si el coordinador falla antes de enviar mensajes precompromisos, la cohorte acordará unánimemente que la operación se canceló. El coordinador no enviará un mensaje de doCommit hasta que todos los miembros de la cohorte hayan aceptado que están preparados para comprometerse. Esto elimina la posibilidad de que cualquier miembro de la cohorte completara la transacción antes de que todos los miembros de la cohorte tuvieran conocimiento de la decisión de hacerlo. – Ken

+0

. No veo cómo agregar la fase adicional ayudará con el problema – Ken

Respuesta

10

En 3PC es posible determinar la decisión del coordinador que falló al consultar las cohortes activas restantes. Si una cohorte activa está en estado precompromiso, eso significa que todos acordaron comprometerse (de lo contrario, el coordinador no habría enviado una confirmación previa). Y tenemos que comprometer al resto de las cohortes porque las fallidas podrían haberse comprometido.

Si ninguna de las cohortes está en estado precomprometido, podemos suponer que el coordinador no ha enviado 'commit' a ninguna cohorte, por lo que no se han producido efectos secundarios y podemos abortar.

Aquí es buena explicación: http://the-paper-trail.org/blog/consensus-protocols-three-phase-commit/

+0

"Si alguna cohorte activa está en pre "comprometerse con el estado" significa que todos ellos acordaron comprometerse (de lo contrario, el coordinador no habría enviado el compromiso previo). Y tenemos que comprometer al resto de las cohortes porque las fallidas podrían haber cometido ". Pero, ¿qué sucede si el coordinador nunca recibió un sí de la cohorte fallida (después de que el coordinador envió el compromiso previo debido a un retraso) y envió un aborto, que la cohorte fallida recibió, abortó la transacción y luego falló? – user1715122

Cuestiones relacionadas