En informática , el procesamiento de transacciones es el procesamiento de información [1] que se divide en operaciones individuales e indivisibles llamadas transacciones . Cada transacción debe tener éxito o fracasar como una unidad completa; nunca puede completarse solo parcialmente.
Por ejemplo, cuando compra un libro en una librería en línea, intercambia dinero (en forma de crédito ) por un libro. Si su crédito es bueno, una serie de operaciones relacionadas garantiza que obtenga el libro y la librería obtenga su dinero. Sin embargo, si una sola operación en la serie falla durante el intercambio, todo el intercambio falla. No obtiene el libro y la librería no obtiene su dinero. La tecnología responsable de hacer que el intercambio sea equilibrado y predecible se llama procesamiento de transacciones . Las transacciones garantizan que los recursos orientados a datos no se actualicen permanentemente a menos que todas las operaciones dentro de la unidad transaccional se completen con éxito. Al combinar un conjunto de operaciones relacionadas en una unidad que tenga éxito o fracase por completo, se puede simplificar la recuperación de errores y hacer que la aplicación sea más confiable.
Los sistemas de procesamiento de transacciones consisten en hardware y software informáticos que alojan una aplicación orientada a transacciones que realiza las transacciones rutinarias necesarias para realizar negocios. Algunos ejemplos incluyen sistemas que administran el ingreso de pedidos de venta, reservas de aerolíneas, nóminas, registros de empleados, fabricación y envíos.
Dado que hoy en día la mayoría del procesamiento de transacciones (aunque no necesariamente todo) es interactivo, el término suele tratarse como sinónimo de procesamiento de transacciones en línea .
El procesamiento de transacciones está diseñado para mantener la integridad de un sistema (normalmente una base de datos o algunos sistemas de archivos modernos ) en un estado conocido y consistente, garantizando que las operaciones interdependientes en el sistema se completen todas con éxito o se cancelen todas con éxito.
Por ejemplo, considere una transacción bancaria típica que implica transferir $700 de la cuenta de ahorros de un cliente a la cuenta corriente de otro cliente. Esta transacción implica al menos dos operaciones separadas en términos informáticos: debitar $700 de la cuenta de ahorros y acreditar $700 de la cuenta corriente. Si una operación tiene éxito pero la otra no, los libros del banco no cuadrarán al final del día. Por lo tanto, debe haber una manera de garantizar que ambas operaciones tengan éxito o que ambas fracasen para que nunca haya ninguna inconsistencia en la base de datos del banco en su conjunto.
El procesamiento de transacciones vincula múltiples operaciones individuales en una única transacción indivisible y garantiza que todas las operaciones de una transacción se completen sin errores o que ninguna de ellas lo haga. Si algunas de las operaciones se completan pero se producen errores cuando se intentan realizar las demás, el sistema de procesamiento de transacciones "revierte" todas las operaciones de la transacción (incluidas las que se realizaron correctamente), borrando así todos los rastros de la transacción y restaurando el sistema al estado consistente y conocido en el que se encontraba antes de que comenzara el procesamiento de la transacción. Si todas las operaciones de una transacción se completan correctamente, el sistema confirma la transacción y todos los cambios en la base de datos se vuelven permanentes; la transacción no se puede revertir una vez que esto se hace.
El procesamiento de transacciones protege contra errores de hardware y software que podrían dejar una transacción parcialmente completada. Si el sistema informático falla en medio de una transacción, el sistema de procesamiento de transacciones garantiza que se cancelen todas las operaciones de las transacciones no confirmadas.
Generalmente, las transacciones se emiten simultáneamente. Si se superponen (es decir, si necesitan tocar la misma parte de la base de datos), esto puede crear conflictos. Por ejemplo, si el cliente mencionado en el ejemplo anterior tiene $150 en su cuenta de ahorros e intenta transferir $100 a una persona diferente mientras al mismo tiempo mueve $100 a la cuenta corriente, solo una de ellas puede tener éxito. Sin embargo, forzar que las transacciones se procesen secuencialmente es ineficiente. Por lo tanto, las implementaciones concurrentes del procesamiento de transacciones están programadas para garantizar que el resultado final refleje un resultado libre de conflictos, el mismo que podría alcanzarse si se ejecutan las transacciones secuencialmente en cualquier orden (una propiedad llamada serializabilidad ). En nuestro ejemplo, esto significa que sin importar qué transacción se emitió primero, la transferencia a una persona diferente o el movimiento a la cuenta corriente tiene éxito, mientras que la otra falla.
Los principios básicos de todos los sistemas de procesamiento de transacciones son los mismos. Sin embargo, la terminología puede variar de un sistema de procesamiento de transacciones a otro y los términos que se utilizan a continuación no son necesariamente universales.
Los sistemas de procesamiento de transacciones garantizan la integridad de la base de datos mediante el registro de los estados intermedios de la base de datos a medida que se modifica y, a continuación, utilizan estos registros para restaurar la base de datos a un estado conocido si no se puede confirmar una transacción. Por ejemplo, el sistema reserva copias de la información de la base de datos antes de que una transacción pueda realizar modificaciones (a esto a veces se le llama imagen anterior ). Si alguna parte de la transacción falla antes de confirmarse, estas copias se utilizan para restaurar la base de datos al estado en el que se encontraba antes de que comenzara la transacción.
También es posible mantener un diario separado de todas las modificaciones a un sistema de administración de bases de datos (a veces llamado imágenes posteriores ). Esto no es necesario para la reversión de transacciones fallidas, pero es útil para actualizar el sistema de administración de bases de datos en caso de una falla de la base de datos, por lo que algunos sistemas de procesamiento de transacciones lo proporcionan. Si el sistema de administración de bases de datos falla por completo, debe restaurarse a partir de la copia de seguridad más reciente. La copia de seguridad no reflejará las transacciones confirmadas desde que se realizó la copia de seguridad. Sin embargo, una vez que se restaura el sistema de administración de bases de datos, el diario de imágenes posteriores se puede aplicar a la base de datos ( rollforward ) para actualizar el sistema de administración de bases de datos. Cualquier transacción en progreso en el momento de la falla se puede revertir. El resultado es una base de datos en un estado consistente y conocido que incluye los resultados de todas las transacciones confirmadas hasta el momento de la falla.
En algunos casos, dos transacciones pueden, durante su procesamiento, intentar acceder a la misma parte de una base de datos al mismo tiempo, de una manera que les impide continuar. Por ejemplo, la transacción A puede acceder a la parte X de la base de datos, y la transacción B puede acceder a la parte Y de la base de datos. Si en ese punto, la transacción A intenta acceder a la parte Y de la base de datos mientras la transacción B intenta acceder a la parte X, se produce un bloqueo y ninguna transacción puede continuar. Los sistemas de procesamiento de transacciones están diseñados para detectar estos bloqueos cuando ocurren. Normalmente, ambas transacciones se cancelarán y se revertirán, y luego se reiniciarán automáticamente en un orden diferente, de modo que el bloqueo no vuelva a ocurrir. O, a veces, solo una de las transacciones bloqueadas se cancelará, se revertirá y se reiniciará automáticamente después de un breve retraso.
Los bloqueos también pueden ocurrir entre tres o más transacciones. Cuantas más transacciones se encuentren involucradas, más difícil será detectarlos, hasta el punto que los sistemas de procesamiento de transacciones descubren que existe un límite práctico para los bloqueos que pueden detectar.
En sistemas donde los mecanismos de confirmación y reversión no están disponibles o no son deseables, a menudo se utiliza una transacción de compensación para deshacer las transacciones fallidas y restaurar el sistema a un estado anterior.
Jim Gray definió las propiedades de un sistema de transacciones confiable a finales de la década de 1970 bajo el acrónimo ACID : atomicidad, consistencia, aislamiento y durabilidad. [1]
Los cambios de estado de una transacción son atómicos: se producen todos o no se produce ninguno. Estos cambios incluyen cambios en la base de datos, mensajes y acciones en los transductores.
Coherencia : Una transacción es una transformación correcta del estado. Las acciones tomadas en conjunto no violan ninguna de las restricciones de integridad asociadas con el estado.
Aunque las transacciones se ejecutan simultáneamente, a cada transacción T le parece que las demás se ejecutaron antes de T o después de T, pero no ambas.
Una vez que una transacción se completa con éxito (se confirma), sus cambios en la base de datos sobreviven a las fallas y conservan sus cambios.
El software estándar de procesamiento de transacciones , como el Sistema de Gestión de la Información de IBM , se desarrolló por primera vez en la década de 1960 y, a menudo, estaba estrechamente vinculado a sistemas de gestión de bases de datos particulares . La informática cliente-servidor implementó principios similares en la década de 1980 con un éxito desigual. Sin embargo, en años más recientes, el modelo distribuido cliente-servidor se ha vuelto considerablemente más difícil de mantener. A medida que el número de transacciones creció en respuesta a varios servicios en línea (especialmente la Web ), una única base de datos distribuida no era una solución práctica. Además, la mayoría de los sistemas en línea consisten en un conjunto completo de programas que operan juntos, a diferencia de un modelo estricto cliente-servidor donde el servidor único podría manejar el procesamiento de transacciones. Hoy en día, hay disponibles varios sistemas de procesamiento de transacciones que funcionan a nivel entre programas y que se escalan a sistemas grandes, incluidos los mainframes .
Un esfuerzo es el Procesamiento de Transacciones Distribuidas (DTP) X/Open (ver también Java Transaction API (JTA). Sin embargo, los entornos de procesamiento de transacciones propietarios como CICS de IBM siguen siendo muy populares, [ cita requerida ] aunque CICS ha evolucionado para incluir también estándares industriales abiertos.
El término procesamiento de transacciones extremas (XTP) se utilizó para describir los sistemas de procesamiento de transacciones con requisitos poco comunes, en particular requisitos de rendimiento (transacciones por segundo). Estos sistemas pueden implementarse mediante arquitecturas distribuidas o de tipo clúster. Se utilizó al menos en 2011. [2] [3]