Supongamos que todas las bases de datos involucradas en una transacción distribuida implementada con señal de confirmación en dos fases están listas para comprometerse y tienen los bloqueos necesarios. El coordinador envía una señal para confirmar y todas las bases de datos ejecutan su parte de la transacción, pero una base de datos SQL encuentra un error de división por cero como resultado de una supervisión de programación que no considera esa posibilidad. Dado que el coordinador ya señaló comprometerse con todos, ¿qué sucede como resultado de esa división por cero?¿Commite dos fases contra fallas de confirmación final?
Respuesta
La segunda fase de confirmación normalmente no contiene código de usuario que puede fallar. Los administradores de recursos participantes deben garantizar que no se produzcan fallas. Si se infringe esta garantía, el protocolo no puede garantizarla.
La confirmación de dos fases intenta resolver el Two Generals Problem. No hay una solución completa a este problema. TPC es una aproximación.
Otra forma en que TPC puede fallar es en el caso de una partición de red. Algunos administradores de recursos pueden realizar la confirmación final, pero es posible que algunos no la reciban. De nuevo, este problema no tiene solución. Incluso los reintentos no pueden resolverlo.
Incluso puede desencadenar este problema en condiciones reales: ejecute todos los nodos participantes en una prueba de esfuerzo y tire del cable de red en un punto arbitrario. Con alta probabilidad, sus bases de datos distribuidas ahora son inconsistentes porque algunos mensajes de compromiso se perdieron en un momento muy inconveniente.
- 1. protocolo de confirmación de 3 fases
- 2. ¿Azure SQL Database es compatible con la confirmación en dos fases (2PC)?
- 3. Objeto C Construcción de dos fases de los objetos
- 4. Confirmación trifásica
- 5. Recursos sobre programación segura contra fallas y tolerancia a fallos
- 6. Protéjase contra ataques de Dos
- 7. Búsqueda en dos fases: se necesita una explicación
- 8. ¿Cuándo se usa el origen de datos XA y la confirmación de 2 fases?
- 9. Compromiso de dos fases: ¿cómo utilizar mi cola de forma efectiva?
- 10. Fases del evento Flash?
- 11. Linux embebido - Fases de arranque
- 12. Confirmación del contenido del archivo contra el hash
- 13. Procesamiento en dos fases: No generar etiquetas vacías desde la fase 1 Procesamiento XSLT 2.0
- 14. ¿Qué se entiende por "falla" en la protección contra fallas rápidas de IIS?
- 15. Cuál es un buen mensaje de usuario final para fallas de concurrencia optimistas
- 16. ¿Los punteros inteligentes excluyen la necesidad de una construcción en dos fases?
- 17. Controlador de fallas multiplataforma
- 18. ¿Cómo puedo evitar todas las excepciones y proteger mi aplicación contra fallas?
- 19. ¿Commite y se fusiona en subdirectorios SVN considerados dañinos?
- 20. Pruebas unitarias Fallas WCF
- 21. Un intento ilegal de comprometer un recurso capaz de una fase con recursos existentes con capacidad de dos fases
- 22. WCF - Fallas/Excepciones versus Mensajes
- 23. ¿Cómo coloco dos puntos en una cadena de dos caracteres desde el final usando Perl?
- 24. Jquery cuadro de confirmación
- 25. Corrección de fallas de segmentación en C++
- 26. Informe de fallas de ráfagas para Android
- 27. Uso del eco sin espacio final en DOS
- 28. Python assert: ¿mejor introspección de fallas?
- 29. Mono AOT Segmentación de fallas - extraño problema
- 30. Manejo de fallas con la tela
¿Cómo y cuándo exactamente espera que ocurra este error? Supongo que tal error ocurriría durante la fase uno, causando una reversión. – Oded
¿Quiere decir que la definición de la fase de precomisión es que todos ejecutan completamente su parte de la transacción y esa fase de compromiso se define simplemente escribiendo "" en un registro, pero el punto crítico es que no se produce la ejecución real de la transacción durante la fase de compromiso? Todos los artículos sobre confirmación de dos fases que he encontrado nunca indican exactamente con claridad cuándo cada base de datos ejecuta su parte de la transacción –
user782220
Bueno, lo que realmente sucede es específico de la implementación. Pero sí, eso sería más o menos lo que sucede (se realizan cambios y lo único que las bases de datos distribuidas están esperando es la respuesta del coordinador para "cerrar el trato" al comprometerse). – Oded