Motivos para el Uso de Transacciones en Sistemas Distribuidos
Los sistemas distribuidos, aunque potencialmente muy fiables gracias a la redundancia y autonomía de recursos en diferentes nodos, enfrentan desafíos en la integridad de los datos. La capacidad de detectar y localizar fallas se ve contrarrestada por problemas que motivan el uso de transacciones:
- Dificultad para mantener la consistencia de los datos.
- Limitaciones en la comunicación entre procesos: una misma vía no siempre es suficiente.
- Necesidad de procesamiento en paralelo.
- Manejo interactivo de múltiples usuarios.
Definición y Origen de las Transacciones
Las transacciones, originalmente desarrolladas para sistemas de bases de datos, ayudan a mantener la consistencia de la información. Son un mecanismo que simplifica la creación de sistemas confiables al proporcionar soporte para:
- Compartición de datos.
- Asegurar la seriabilidad de las transacciones.
- Atomicidad en su comportamiento (todo o nada).
- Recuperación de fallas en la red y en los nodos.
El concepto de transacción se inspiró en las operaciones financieras, donde se siguen tres reglas básicas:
- Consistencia: Se deben obedecer ciertas reglas.
- Atomicidad: La transacción debe completarse o abortarse en su totalidad.
- Durabilidad: Una vez completada, una transacción no puede ser abortada.
En el ámbito de los sistemas computacionales, las transacciones se utilizaron inicialmente para asegurar la consistencia entre múltiples usuarios de una base de datos.
Teoría de Transacciones Anidadas
Las transacciones anidadas consisten en una serie de modificaciones (transacciones) a un recurso del sistema (como una base de datos). Se define un punto de inicio (Begin Tran
) y un punto de terminación, creando un bloque de operaciones. Durante este bloque, otros usuarios no pueden modificar los datos hasta que se alcance un estado estable, lo que puede generar inconsistencia temporal y conflictos. Para evitar esto, existen dos enfoques:
- Transacciones Serializadas: Se procesan las transacciones de forma secuencial, asignando una secuencia a cada una. Esto reduce el rendimiento del sistema.
- Transacciones Calendarizadas: Se asignan tiempos de procesamiento a las transacciones, permitiendo la ejecución concurrente y mejorando el rendimiento.
Transacciones Distribuidas
Las transacciones distribuidas involucran a múltiples servidores. Se refieren a transacciones, ya sean planas o anidadas, que acceden a objetos administrados por diferentes servidores.
Una transacción es una unidad lógica de trabajo que puede consistir en una o varias operaciones en la base de datos. Su objetivo es transformar un estado consistente de la base de datos en otro estado consistente. Es crucial asegurar que la base de datos vuelva a un estado consistente al final de la transacción. También puede verse como la invocación a un procedimiento remoto (RPC) que ejecuta un conjunto de operaciones bajo el principio de «todo o nada». El concepto clave es la «ejecución consistente» o «procesamiento confiable».
Mecanismos de Recuperación
Para garantizar la correcta ejecución de las transacciones, el Sistema Manejador de Bases de Datos (DBMS) debe implementar mecanismos de recuperación. Si una transacción realiza modificaciones y ocurre una falla antes de su finalización normal, el DBMS debe anular esas modificaciones. Esto asegura que la transacción se ejecute en su totalidad o se cancele por completo, logrando una apariencia de atomicidad.
El componente del sistema responsable de esta atomicidad es el Manejador de Transacciones. Las operaciones clave son:
- COMMIT: Indica el término exitoso de la transacción. Las modificaciones se hacen permanentes.
- ROLLBACK: Indica el término no exitoso de la transacción. Las modificaciones se anulan o retroceden.
Propiedades ACID de las Transacciones
Una transacción debe cumplir con cuatro propiedades fundamentales, conocidas como ACID:
- Atomicidad (Atomicity): La transacción se ejecuta como una unidad indivisible; o todas las operaciones se completan con éxito, o ninguna lo hace.
- Consistencia (Consistency): La transacción lleva la base de datos de un estado válido a otro estado válido, respetando las reglas y restricciones definidas.
- Aislamiento (Isolation): Las transacciones concurrentes se ejecutan como si se ejecutaran de forma aislada, sin interferir entre sí. El resultado de una transacción no es visible para otras hasta que se completa.
- Durabilidad (Durability): Una vez que una transacción se completa con éxito (COMMIT), sus cambios son permanentes y sobreviven a fallos del sistema.