Compartir por


Implementación de un Administrador de recursos

Cada recurso usado en una transacción se administra mediante un administrador de recursos, cuyas acciones están coordinadas por un administrador de transacciones. Los administradores de recursos trabajan en cooperación con el administrador de transacciones para proporcionar a la aplicación una garantía de atomicidad y aislamiento. Microsoft SQL Server, colas de mensajes durables, tablas hash en memoria son ejemplos de administradores de recursos.

Un administrador de recursos administra datos duraderos o volátiles. La durabilidad (o, por el contrario, la volatilidad) de un administrador de recursos hace referencia a si el administrador de recursos admite la recuperación de errores. Si un administrador de recursos admite la recuperación de errores, conserva los datos en un almacenamiento duradero durante la fase1 (preparación) de modo que, si el administrador de recursos deja de funcionar, puede volver a inscribirse en la transacción tras la recuperación y realizar las acciones adecuadas en función de las notificaciones recibidas del administrador de transacciones. En general, los administradores de recursos volátiles administran recursos volátiles, como una estructura de datos en memoria (por ejemplo, una tabla hash transaccionada en memoria) y los administradores de recursos duraderos administran recursos que tienen un almacén de respaldo más persistente (por ejemplo, una base de datos cuyo almacén de respaldo es disco).

Para que un recurso participe en una transacción, debe inscribirse en la transacción. La Transaction clase define un conjunto de métodos cuyos nombres comienzan por Enlist que proporcionan esta funcionalidad. Los distintos Enlist métodos corresponden a los distintos tipos de inscripción que puede tener un administrador de recursos. En concreto, se usan los métodos para los EnlistVolatile recursos volátiles y el EnlistDurable método para los recursos duraderos. Para simplificar, después de decidir si utilizar el métodoEnlistDurable o EnlistVolatile basado en la compatibilidad de la duración de su recurso, debería dar de alta su recurso para participar en la confirmación en dos fases (2PC) implementando la interfaz IEnlistmentNotification para su administrador de recursos. Para obtener más información sobre 2PC, consulte Confirmar una transacción en fase única y múltiple.

Dando de alta, el administrador de recursos se asegura de que recibe las devoluciones de llamada del administrador de transacciones cuando la transacción se confirma o interrumpe. Hay una instancia de IEnlistmentNotification por la inscripción. Normalmente, hay una inscripción por transacción, pero un administrador de recursos puede optar por inscribirse varias veces en la misma transacción.

Después de la inscripción, el administrador de recursos responde a las solicitudes de la transacción. Un administrador de recursos duradero almacena bastante información para permitir que deshaga o rehaga el trabajo de la transacción de los recursos que él administra. Hay muchas maneras de hacerlo; Mantener versiones de datos o mantener un registro de los cambios son dos técnicas comunes.

Cuando la aplicación confirma la transacción, el administrador de transacciones inicia el protocolo de confirmación en dos fases. El administrador de transacciones pregunta primero a cada administrador de recursos inscrito si está preparado para confirmar la transacción. El administrador de recursos debe prepararse para confirmar o anular la transacción.

Durante la fase de preparación, el administrador de recursos duradero registra los datos antiguos y nuevos en almacenamiento estable para que el administrador de recursos pueda recuperarlos incluso si se produce un error en el sistema. Si el administrador de recursos puede prepararse, informa al administrador de transacciones sobre si desea confirmar o anular la transacción. Si algún administrador de recursos notifica un error de preparación, el administrador de transacciones envía un comando de reversión a cada administrador de recursos e indica el error de la confirmación en la aplicación.

Una vez preparado, un administrador de recursos debe esperar hasta que reciba una devolución de llamada de confirmación o de interrupción del administrador de transacciones en la fase 2. Normalmente, todo el protocolo de preparación y confirmación se completa en una fracción de un segundo. Si hay errores de comunicación o del sistema, es posible que la notificación de confirmación o anulación no llegue durante minutos o horas. Durante este período, el administrador de recursos tiene dudas sobre el resultado de la transacción. No sabe si la transacción se confirmó o anuló. Aunque el administrador de recursos duda sobre una transacción, mantiene los datos modificados al mantener bloqueada la transacción, aislando estos cambios de cualquier otra transacción.

Cuando se produce un error en un administrador de recursos, se anulan todas sus transacciones enlistadas, excepto las que están preparadas o confirmadas antes del error. Cuando un administrador de recursos duraderos se reinicia, se reconstruye el estado confirmado de los recursos que administra recuperando la información de preparación escrita la fase de preparación y confirma o anula de acuerdo con estas transacciones.

En resumen, el protocolo de confirmación en dos fases y los administradores de recursos se combinan para lograr transacciones atómicas y duraderas.

La clase Transaction también proporciona el método EnlistPromotableSinglePhase para dar de alta una Inscripción de fase única promocional (PSPE). Esto permite que un administrador de recursos duradero (RM) hospede y "posee" una transacción que posteriormente se pueda escalar para que la MSDTC lo administre si es necesario. Para obtener más información, vea Optimización mediante el uso de la confirmación de fase única y de la inscripción de fase única promovible.

En esta sección

Los pasos seguidos generalmente por un administrador de recursos se describen en los temas siguientes.

Inscribir recursos como participantes en una transacción

Describe cómo un recurso duradero o volátil puede inscribirse en una transacción.

Confirmar una transacción en fase única y múltiple

Describe cómo responde un administrador de recursos a la notificación de confirmación y prepara la confirmación.

Realización de la recuperación

Describe cómo un administrador de recursos duradero se recupera del error.

Niveles de confianza de seguridad en el acceso a los recursos

Describe cómo los tres niveles de confianza para System.Transactions restringen el acceso a los tipos de recursos que System.Transactions expone.

Optimización mediante el uso de la confirmación de fase única y de la inscripción de fase única promocionable

Describe los procedimientos de optimización disponibles para las implementaciones de administradores de recursos.