Mostrando entradas con la etiqueta Transacciones. Mostrar todas las entradas
Mostrando entradas con la etiqueta Transacciones. Mostrar todas las entradas

Transacciones - Orquestar transacciones




Al margen de los gestores transaccionales podemos crear procesos capaces de reunir un conjunto de transacciones, ejecutarlas en un determinado orden y bajo determinadas condiciones y realizar determinadas acciones de compensación cuando ocurren fallos o errores en el sistema.

Estas aplicaciones o programas capaces de organizar todo un proceso transaccional al nivel más alto se denominan orquestadores o coreógrafos de transacciones.

El objetivo principal de orquestar transacciones es la integración en un solo proceso de procesos distribuidos que se ejecutan en sistemas muy variados, algunos internos a la organización y otros externos.

Por lo general se orquestan transacciones de corta o larga duración en sistemas distribuidos.

Las orquestaciones pueden considerarse a su vez como transacciones atómicas o de larga duración por el gestor transaccional permitiendo que una orquestación llame a su vez a otras orquestaciones que a su vez llaman a transacciones.

La orquestación de transacciones puede realizarse con un proceso propio o con productos de mercado que incluyan un lenguaje para invocar las transacciones.

Ejemplos típicos de productos de mercado con capacidad para orquestar transacciones son Microsoft BizTalk Server o IBM WebSphere Message Broker. 


Transacciones - Gestor Transaccional




Los gestores transaccionales son los componentes de un sistema que procesan la información a través de unos elementos o bloques de procesos denominados transacciones.

Permiten enlazar varias transacciones individuales en una única transacción indivisible, garantizando que todas las transacciones terminen sin errores o que no termine ninguna de ellas.

Si algunas operaciones o transacciones terminaron correctamente y otras no, el gestor transaccional deberá devolver la persistencia de datos a su estado original justo como estaba antes de iniciar el proceso y cancelar las operaciones en curso y futuras que formen parte de la transacción general.

Las transacciones son procesadas en orden cronológico, esto quiere decir que hasta que la transacción n+1 no se ejecutará hasta que no concluya la ejecución de la transacción n.
En algunos casos, dos transacciones pueden en el transcurso de su ejecución, competir por dos recursos al mismo tiempo de tal manera que impide seguir con su ejecución. Un bloqueo mutuo (o inter bloqueo, dead-lock en inglés) ocurre, por ejemplo, cuando la transacción A intenta acceder al área X de la base de datos mientras la transacción B intenta acceder al área Y de la base de datos. Si, en algún punto intermedio, la transacción A intenta acceder al área Y mientras al mismo tiempo la transacción B intenta acceder al área X se genera un bloqueo mutuo que impide a ambas transacciones progresar.
Los gestores transaccionales están diseñados para detectar este tipo de bloqueos cuando ocurren y actuar en concordancia. O bien ambas transacciones son canceladas y el sistema hace ROLLBACK de todos los cambios para luego volver a ejecutarlas automáticamente en diferente orden de tal forma que no se vuelva a formar otro bloqueo mutuo, o bien cancelar y hacer ROLLBACK de una de ellas y volverla a lanzar después de una pequeña espera.

El gestor transaccional se encarga de realizar las operaciones de COMMIT si todo termina correctamente o ROLLBACK si falla alguno de los procesos comprendidos en el ámbito de la transacción.

Algunos gestores transaccionales muy conocidos son CICS e IMS de IBM o Tuxedo de Oracle Corporation.

Transacciones - Sistemas centralizados y distribuidos


SISTEMAS CENTRALIZADOS


Los sistemas centralizados se caracterizan por:

  • Un procesador central que ejecuta todas las aplicaciones
  • Recursos locales compartidos
  • Alta seguridad y confiabilidad de los datos
  • Administración única del sistema
  • Políticas de seguridad y acceso bien definidas y homogéneas
  • Alto coste de procesadores y dispositivos de almacenamiento
  • Dependencia del Centro de Proceso de Datos
  • Un único sistema operativo


Los componentes de proceso de información por lo general están ubicados en un único ordenador y se comunican a través de un área o espacio común (memoria operativa y disco).

Un ejemplo de sistema centralizado es el ordenador central de IBM (IBM Host o IBM Mainframe).



SISTEMAS DISTRIBUIDOS





Los sistemas distribuidos se caracterizan por:

  • Varios procesadores ejecutándose en sitios diferentes 
  • Existencia de uno o varios canales de comunicación que permitan comunicar los procesadores
  • Solo determinados recursos locales son compartidos
  • Dispersión de los datos entre diferentes sistemas lo que obliga a utilizar protocolos seguros al colocarlos en el canal de comunicación
  • Administración del sistema distribuida
  • Políticas de seguridad y acceso diversas
  • Independencia del Centro de Proceso de Datos
  • Diferentes sistemas operativos


Los componentes de proceso de información estás ubicados por lo general en diferentes ordenadores que pueden tener diferentes tecnologías, dimensiones, características técnicas y sistemas operativos. Estos ordenadores se comunican entre sí a través de un canal común que suele estar basado en red y la información es intercambiada con arreglo a unas normas o estándares denominados protocolos que cada ordenador o componente del sistema distribuido está obligado a entender.

Un ejemplo de sistema distribuido es una granja de servidores de diferentes tecnologías y uso (servidores de aplicación, bases de datos, etc.) interconectados a una intranet empresarial.

Las arquitecturas basadas en servicios (SOA – Service Oriented Architecture) son ejemplos claros de sistema distribuido. En estas arquitecturas, componentes de software denominados servicios exponen sus funcionalidades y su capacidad de proceso de información a lo largo de un bus común o canal de comunicación. Algunos de estos componentes pueden estar basados en servidores Windows, otros en servidores UNIX y otros en ordenador central.










Transacciones - Procesos sincrónicos y asincrónicos


La mayoría de las transacciones atómicas ejecutan operaciones sincrónicas, o sea, la operación comienza y se queda esperando respuesta la cual se recibe en un breve espacio de tiempo.

Una característica idónea para un sistema de procesamiento es que la información procesada o respuesta esté disponible en el menor tiempo posible. De ahí que en el diseño transaccional del sistema se intenten llamar a procesos de forma sincrónica tanto como sea posible.

Podemos decir que ejecución de operaciones de forma sincrónica o asincrónica está basada fundamentalmente en el tiempo de respuesta y la forma en que se espera la respuesta.

Cuando el tiempo de respuesta es muy pequeño o mucho menor que el tiempo de duración total de la transacción, tiene sentido esperar por la respuesta y entonces podemos invocar al proceso de forma sincrónica.

 


Cuando el tiempo de respuesta es muy grande o incluso no se conoce, y no tiene sentido esperar una respuesta inmediata o incluso bloquear en la espera los datos, podemos invocar al proceso de forma asincrónica.


 


Las llamadas sincrónicas invocan a un módulo, rutina o función devolviendo un resultado en un área de intercambio de datos prácticamente de inmediato.

Las llamadas asincrónicas tienen la particularidad de que el resultado no puede obtenerse en las áreas de intercambio de datos de forma inmediata. En vez de eso, el sistema recibe a posteriori un mensaje con el resultado.

Es un proceso que transcurre en dos fases: una fase de invocación asincrónica del proceso y otra fase de recepción de la información procesada. Ambas fases están espaciadas en el tiempo.

El tratamiento de mensajes en llamadas asincrónicas nos lleva al concepto de evento. Un evento es algo que ocurre dentro del sistema cuando se cumple una determinada condición. Cada evento puede tener asociado una pieza de código que se ejecuta cuando es activado o “disparado”. Este código se denominada manipulador de evento.

De esta forma, una llamada a un proceso de forma asincrónica no tiene que esperar por la respuesta. Cuando le llegue un mensaje, el sistema activa el evento “Recepción de Mensaje”, se da control al código programado para atender al evento y se procesa el mensaje recibido obteniéndose así la respuesta del proceso llamado asincrónicamente.







Transacciones - Procesos acoplados y desacoplados



Los procesos acoplados son aquellos que tienen una fuerte dependencia unos de otros para su funcionamiento. En un sistema de programación un ejemplo de componentes acoplados son los módulos o rutinas.

Los procesos o módulos desacoplados por lo general no son incluidos dentro del código de la aplicación y se invocan de forma dinámica.

La llamada a módulos desacoplados usualmente está basada en el concepto de mensaje. Este concepto implica varios elementos:

  • Un emisor
  • Un receptor
  • Un canal de comunicación
  • Un formato de mensaje
  • La información que se desea transmitir


Estos módulos están siempre esperando un mensaje de algún posible emisor. Cuando esta información les llega por un determinado canal de comunicación, la procesan y su vez devuelven al emisor un mensaje con la respuesta.

El canal de comunicación puede ser un elemento complejo capaz de crear colas de mensajes, realizar distribuciones a varios subscritores (receptores de mensajes), etc.

Si consideramos que todo nuestro sistema tiene acceso a este canal de comunicación y que puede utilizarlo a través de un protocolo (estándar de establece las reglas de cómo intercambiar información entre los emisores y receptores de un canal), es posible considerar que podemos procesar información en forma desacoplada tan solo enviando mensajes a módulos o componentes  que utilizan el canal y recibiendo información procesada de los mismos.



Transacciones - Buenas prácticas


A continuación algunas buenas prácticas a tener en cuenta cuando implementamos procesos transaccionales:

  • Diseñar siempre que sea posible transacciones atómicas
  • Una transacción atómica no puede quedar a medias ante un fallo del sistema o los datos
  • Una transacción atómica debe contener un proceso que pueda ejecutarse de principio a fin
  • Una transacción atómica no debe afectar a otras transacciones.
  • Si una transacción atómica bloquea datos en un repositorio debe de hacerlo en el tiempo más breve posible
  • Una transacción atómica que acabe exitosamente debe poder persistir los datos procesados (COMMIT)
  • Una transacción atómica que acabe erróneamente debe deshacer la persistencia de los datos procesados (ROLLBACK)
  • Al programar transacciones debemos delimitar un ámbito, o sea saber donde comienza y donde termina el proceso transaccional
  • Una transacción atómica no debe a llamar a procesos que comprometan su tiempo de respuesta
  • Una transacción de larga duración es necesaria siempre que: intervenga un flujo humano en el proceso, se llamen procesos de forma asincrónica y demorados en tiempo, se llamen a otras transacciones de corta o larga duración que persistan los datos
  • Una transacción de larga duración debe contener un proceso que pueda ejecutarse de principio a fin
  • Una transacción de larga duración debe poder persistir el estado de los procesos o transacciones que contiene
  • Una transacción de larga duración debe poder ejecutar operaciones de compensación en todos los procesos desde 1 a n-1 ante un fallo en el proceso n.
  • La compensación es un proceso que por lo general implica reglas de negocio encaminadas a anular el efecto de las operaciones persistidas en el proceso transaccional
  • Utilizar un orquestador de transacciones siempre que se necesite modelar un proceso de alto nivel formado por transacciones
  • El orquestador de transacciones puede ser un programa que invoque transacciones
  • El orquestador de transacciones debe llevar y persistir el estado de las transacciones ejecutadas
  • El orquestador de transacciones debe poder hacer COMMIT o ROLLBACK si ejecuta transacciones atómicas
  • El orquestador de transacciones debe poder realizar operaciones de compensación si las transacciones llamadas realizan COMMIT o ROLLBACK


Transacciones - Escenarios y ejemplos


ESCENARIOS DE PROCESOS TRANSACCIONALES

A la hora de construir procesos transaccionales debemos considerar diferentes escenarios. Nos referimos al gestor como el proceso controlador de la transacción y los procesos como módulos o rutinas que procesan una parte de la información.

Escenario
Descripción
Enfoque transaccional
Procesos de corta duración  en un sistema centralizado
Varios procesos de corta duración que persisten datos en un sistema centralizado. El gestor de base de datos y los procesos residen en el mismo sistema.
Transacción atómica. El gestor se encarga de ejecutar secuencialmente cada proceso y de verificar antes de la siguiente ejecución que todo ha terminado correctamente. El gestor se encarga de la persistencia de datos.
Procesos de corta y larga duración en un sistema distribuido
Varios procesos en un sistema distribuido que persisten datos. Algunos son de corta y otros de larga duración. Las bases de datos y los procesos pueden residir en diferentes sistemas.
Transacción de larga duración. El gestor ejecuta secuencialmente cada proceso. Cada proceso realiza su propia persistencia de datos informando al gestor si todo ha ido bien o mal. El  gestor se encarga de mantener el estado general del proceso y de ejecutar operaciones de compensación para todo el sistema si alguno de los procesos falla.
Transacciones atómicas en un sistema centralizado
Se ejecutan varias transacciones en un sistema centralizado  persistiendo sus datos. Las bases de datos y las transacciones residen en el mismo sistema.
Transacción atómica. Cada transacción informa al gestor si ha ido bien y mal. El gestor se encarga de mantener el estado general del proceso y de ejecutar operaciones de compensación para todo el sistema si alguna de las transacciones ha ido mal.
Transacciones atómicas en sistema distribuido
Se ejecutan varias transacciones en un sistema distribuido. Cada una de ellas persiste sus datos. Las bases de datos y las transacciones residen en sistemas diferentes.
Transacción atómica. Cada transacción informa al gestor si ha ido bien y mal. El gestor se encarga de mantener el estado general del proceso y de ejecutar operaciones de compensación para todo el sistema si alguna de las transacciones ha ido mal.
Transacciones atómicas y de larga duración en un sistema centralizado
Se ejecutan varias transacciones en un sistema centralizado persistiendo sus datos.  Algunas de ellas son atómicas y otras de larga duración. Las bases de datos y las transacciones residen en el mismo sistema. El tiempo de respuesta entre transacciones puede ser largo.
Transacción de larga duración. El gestor ejecuta secuencialmente cada proceso. Cada proceso realiza su propia persistencia de datos. El  gestor se encarga de mantener el estado general del proceso y de ejecutar operaciones de compensación para todo el sistema si alguno de los procesos falla.
Transacciones de larga duración en un sistema distribuido
Se ejecutan varias transacciones en un sistema distribuido persistiendo sus datos. Las bases de datos y las transacciones residen en diferentes sistemas. El tiempo de respuesta entre transacciones puede ser largo.
Transacción de larga duración. El gestor ejecuta secuencialmente cada transacción. Cada transacción  realiza su propia persistencia de datos informando al gestor si todo ha ido bien o mal. El  gestor se encarga de mantener el estado general del proceso y de ejecutar operaciones de compensación para todo el sistema si alguno de las transacciones falla.
Transacciones atómicas y de larga duración en un sistema distribuido
Se ejecutan varias transacciones en un sistema distribuido persistiendo sus datos. Las bases de datos y las transacciones residen en diferentes sistemas. El tiempo de respuesta entre transacciones puede ser largo.
Transacción de larga duración. El gestor ejecuta secuencialmente cada transacción. Cada transacción  realiza su propia persistencia de datos informando al gestor si todo ha ido bien o mal. El  gestor se encarga de mantener el estado general del proceso y de ejecutar operaciones de compensación para todo el sistema si alguno de las transacciones falla.

EJEMPLOS DE ESCENARIOS

Escenario
Ejemplos
Procesos de corta duración  en un sistema centralizado
Programa COBOL que llama a módulos que escriben en la base de datos DB2. Si todas las llamadas prosperan, el programa principal COBOL  realiza un COMMIT. En caso contrario, realiza un ROLLBACK de todos los datos y termina el proceso transaccional.
Procesos  de corta y larga duración en un sistema distribuido
Una aplicación BizTalk o MessageBroker incluye un Human Workflow y varias transacciones atómicas en una orquestación.
Transacciones atómicas en un sistema centralizado
Transacciones CICS que permiten que el frontal de negocio acceda a la capa de negocio y a los datos del backend.
Transacciones atómicas en sistema distribuido
Aplicaciones de escritorio o Web que actualizan bases de datos. La aplicación puede estar desplegada en un ordenador Windows mientras que la base de datos se ejecuta en un servidor AIX o zOS. Al realizar operaciones de actualización (UPDATE o INSERT) se realizan operaciones de persistencia de datos (COMMIT y ROLLBACK)
Transacciones atómicas y de larga duración en un sistema centralizado
Un proceso Batch típico. Cada paso de JCL se comporta como una transacción atómica persistiendo datos y estado e indicando al JCL si ha terminado correctamente o no. El JCL hace de proceso controlador, decidiendo que pasos hay que ejecutar y cuáles no y termina con cero si todo ha ido bien o con un código distinto de cero si ha habido algún error, o sea termina (cadena terminada) o no termina  (cadena “cascada”). Al mantenerse estado es posible relanzar el JCL en un paso específico. En dependencia del proceso Batch y del volumen de datos puede durar desde unos pocos segundos hasta horas en ejecución.
Transacciones de larga duración en un sistema distribuido
Orquestaciones de BizTalk que incluyen procesos de Workflow Foundation (WWF).
Transacciones atómicas y de larga duración en un sistema distribuido
Orquestaciones de BizTalk o Message Broker que incluyen consulta asincrónicas a servicios externos recibiendo los datos de respuesta en forma de mensajes en colas MQ.



Transacciones - Procesos de larga duración


Una transacción de larga duración (long-running transaction) es aquella cuya ejecución se realiza en un tiempo relativamente largo y que no necesita de las capacidades ACID de las transacciones atómicas.

En este caso el controlador ejecuta un proceso n. Si todo sale bien, persiste los datos procesados. En caso contrario deshace la persistencia de datos y da paso a un proceso denominado compensación tratando de devolver el estado inicial del repositorio a como estaba antes de comenzar la transacción.

El controlador se encarga también de persistir a su vez el estado de todo el proceso transaccional ya que no se sabe en que momento exacto este va a continuar.

Las transacciones de larga duración pueden permanecer inactivas durante períodos de tiempo mientras esperan recibir mensajes externos.

DISEÑO DE PROCESOS DE LARGA DURACION COMO TRANSACCIONES

Desde un punto de vista teórico, un proceso transaccional es algo que no puede quedar a medias, que debe concluirse de forma exitosa o fallida, en cuyo caso no deben persistir los datos procesados.

Veamos el ejemplo típico de una solicitud de préstamo bancario. Este es un proceso que pasa por múltiples etapas desde su solicitud hasta su aprobación o desaprobación. Estas etapas incluyen captar al cliente si ya no lo es, crearle una cuenta, análisis de riesgo teniendo en cuenta sus ingresos y el monto del préstamo pedido, etc. En cada etapa trabajan diferentes departamentos y personal de la banca para al final conceder el préstamo o emitir el rechazo a la solicitud, y cada etapa puede llevar un tiempo más o menos largo en base a las prioridades de la oficina, carga de trabajo de los empleados, documentación suministrada por el cliente y otros factores.

Sin embargo desde el punto de vista lógico y de cara al cliente, sigue siendo un proceso transaccional: el cliente solo ve el resultado con el esquema de todo (préstamo concedido) o nada (préstamo denegado), si alguna de las condiciones o análisis reflejan que el cliente no es apto para recibir el préstamo solicitado, se termina la transacción y los datos que  componen el préstamo no son persistidos puesto que este no ha llegado a formalizarse.

Una solicitud de préstamo es un proceso transaccional pero de larga duración.

Posee consistencia, porque las operaciones para conceder un préstamo pueden terminar felizmente si los datos son correctos y se ajustan a las condiciones que impone el banco.

También posee durabilidad, porque una vez concedido el préstamo se persisten unos datos que permitirán soportar todo el proceso de amortización del préstamo, las cuotas que se cobrarán al cliente, los intereses, etc.

La atomicidad y la consistencia no son estrictas, debido a que no pueden bloquearse los datos hasta que la transacción termine, de forma tal que otras transacciones y procesos pueden modificarlos.

Una transacción de larga duración puede estar formada por transacciones atómicas y por otras transacciones de larga duración. Las primeras se ejecutan de forma rápida (crear el expediente de un nuevo cliente o crear una cuenta corriente), otras se concluyen después de tiempo más o menos largo (solicitud de un préstamo, solicitud de una tarjeta de crédito o débito). Es muy común que algunos de los procesos de la transacción sean atómicos y otros de larga duración.

Por lo general estas transacciones forman parte de un flujo de trabajo (human workflow) en el cuál intervienen personas para aprobaciones, autorizaciones o agentes externos a la entidad.

Otra característica de este tipo de transacciones es que al margen de que el resultado sea todo o nada, los procesos u operaciones individuales persisten los datos o realizan operaciones de COMMIT. Esto se debe a que como la ejecución es tan demorada en el tiempo,  la transacción debe retomarse en algún punto para poder continuar su curso normal y en ese momento apoyarse en un estado anterior y utilizar datos previamente persistidos. Los recursos no se pueden tener bloqueados y hay que establecer estados intermedios que permitan continuar la ejecución más tarde.

Por ejemplo, al procesar la solicitud de un préstamo, un primer paso es captar un nuevo cliente persistiendo sus datos personales (nombre, dirección, DNI, teléfono, etc.)

Un segundo paso que puede ser la creación de una cuenta corriente (si no la tiene), se apoya en los datos anteriormente guardados para ese cliente.

El proceso transaccional de solicitud de préstamo continua, asentando datos y guardando el estado en cada una de las operaciones que lo componen.

¿Que ocurre si al final de la transacción el préstamo es denegado?

Puede ocurrir que el cliente, no se sienta interesado en pertenecer a la entidad bancaria que no ha podido resolver su problema y decide marcharse. En este caso, y a pesar que los datos finales para el préstamo no fueron persistidos debido a la negativa, es necesario deshacer todos los datos persistidos que puede que no sean de interés de institución bancaria (en realidad por normativas de Banco de España se conservan datos de cliente por un período de varios años).

Imaginemos que las operaciones que persistieron los datos eran transacciones atómicas. Cumpliendo con las características ACID, los datos persistidos seguirán guardados a pesar de que la transacción de larga duración no terminó de forma exitosa para el cliente.

En este caso, se activa una nueva operación además del COMMIT y del ROLLBACK. Esta operación se denomina compensación.

COMPENSACION

La compensación no es más que deshacer de forma controlada y ordenada los datos persistidos por una operación.

Cuando los datos no han sido persistidos aún, o sea, están en almacenamiento temporal (variables, buffers, áreas de log, objetos, etc.) la operación “no persistirlos” es el ROLLBACK.

En teoría, tanto el ROLLBACK como la compensación deben devolver los repositorios de datos a su estado original, o sea al estado en que se encontraban justo antes de iniciar la transacción que los persistió a través de operación COMMIT.

La compensación es un proceso más complejo que un borrado, dado que la persistencia de datos puede ocurrir en múltiples repositorios y que los datos por lo general están relacionados entre sí. Esto implica que no solo hay que borrar datos en un repositorio sino también borrar datos relacionados en otros repositorios e incluso procesarlos.  

Por lo general el proceso de compensación implica la ejecución de determinadas reglas de negocio que permiten, si no devolver el estado del repositorio a como estaba originalmente, anular los efectos de la operación persistida.

Un ejemplo de banca es como deshacer o cancelar una operación contable errónea, por ejemplo un cargo domiciliado en nuestra cuenta.

Este cargo no solo afecta el saldo de la cuenta en cuestión, sino que representa un ingreso en la cuenta de la entidad que nos hizo el cargo y su vez ha habido cobro de comisiones por el servicio, o sea se ha realizado contabilidad personal y contabilidad empresarial.

Deshacer o compensar este cargo significa entre otras cosas: abonar el monto del cargo anterior en la cuenta aumentando su saldo,  realizar un cargo en la cuenta de la entidad que lo produjo y deshacer o realizar nuevos cobros de comisiones. Aquí es donde interviene el proceso de compensación.

Es importante comprender que la compensación es una operación que forma parte de un proceso de varias etapas. Siempre se compensa lo que una etapa previa ha persistido. Si las etapas previas no han persistido los datos, la operación correcta es un ROLLBACK.


Transacciones - Transacciones atómicas


Una transacción atómica (atomic transaction) considera un conjunto de operaciones como una única operación que puede prosperar o fracasar. Este conjunto de operaciones están agrupadas formando el ámbito de la transacción. Si una operación se ejecuta correctamente, da paso a la operación siguiente, en caso contrario realiza una operación de ROLLBACK que deshace los datos o el estado que iba a ser persistido y termina la unidad de ejecución o el ámbito de la transacción.

Un proceso controlador se encarga de ejecutar cada uno de los procesos que componen el ámbito de la transacción y de determinar si individualmente han terminado correctamente o no.

Al final del ámbito, si la última operación ha tenido una ejecución correcta como el resto de las operaciones anteriores, el proceso controlador realiza un COMMIT que se encarga de persistir los datos modificados por la transacción.

Las transacciones atómicas son particularmente útiles cuando se desea aislar los datos del resto de los procesos o transacciones. Estas transacciones deben asegurar que los cambios realizados a objetos, variables, bases de datos y otros repositorios de información solo sean visibles fuera del ámbito de la transacción después de ejecutar la operación COMMIT. En otras palabras, los cambios solo son visibles después de ser persistidos.

El esquema de tratamiento de errores o de excepciones debe garantizar que cada operación que falle debe ejecutar una operación de ROLLBACK para impedir la persistencia de cambios de forma permanente y acto seguido terminar el ámbito de la transacción.

Por lo general, las transacciones atómicas se caracterizan por sus propiedades ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad).

Son atómicas porque el conjunto de operaciones que se ejecutan como un todo no puede quedar a medias, sino que en principio tiene que terminarse. En caso de error, la transacción debe garantizar que los cambios nunca serán persistidos.

Son consistentes, porque por diseño realizan unas operaciones que en la práctica se pueden realizar. Estas operaciones tienen que estar convenientemente probadas para garantizar que al ser incorporadas a la transacción atómica, esta no pierda su consistencia.

Son aisladas, porque su ejecución no interfiere en la ejecución de otras transacciones.

Y son durables, debido a que como resultado de una ejecución exitosa de la transacción, se persisten unos cambios de datos o de estado que no pueden ser deshechos.

Estas transacciones son típicas en sistemas centralizados y son de corta duración.

Ejemplos de este tipo de transacciones son: extracción de dinero de cajero automático o una consulta de saldo. 



Transacciones - Introducción


Este artículo pretende ser una especie de guía a los desarrolladores para enfocar  la transaccionalidad de las aplicaciones.  Revisamos las diferentes formas de realizar las transacciones y los diferentes escenarios a fin de que el desarrollador o los analistas puedan orientarse fácilmente tanto a la hora de diseñar especificaciones funcionales como a la hora de programar.


No confundir el concepto de “transacción” con lo que usualmente denominamos en entorno de ordenador central “transacción” refiriéndonos a procesos transaccionales montados sobre IBM CICS como gestor transaccional.

El concepto de transacción es algo mucho más amplio y está presente tanto en sistemas centralizados como en sistemas distribuidos.

Tampoco debemos confundir el concepto de “sistema distribuido” asumiendo que es cualquier sistema que no sea el ordenador central. Es posible perfectamente tener procesos distribuidos tanto en ordenador central como en otras plataformas Windows o UNIX.

El uso correcto de la transaccionalidad ayuda a garantizar la consistencia de la información y minimiza los bloqueos de datos maximizando la concurrencia de los procesos.

A su vez, todos los gestores de bases de datos incluyen soporte para montar procesos transaccionales así como la gran mayoría de los lenguajes de programación que utilizamos.

Dado a que tenemos todas las herramientas necesarias para soportar procesos transaccionales, debemos conocer los conceptos, las ventajas y las mejores prácticas para poder aplicarlos en beneficio de la organización.


CONCEPTOS 

Concepto
Significado
Transacción
Conjunto de operaciones que desde un punto de vista lógico pueden considerarse como una única operación indivisible. Su ejecución se realiza bajo un esquema de “todo o nada”, es decir si toda la operación ha tenido éxito o si nada ha tenido éxito en el caso de alguna operación fallida.
ACID
Siglas en inglés de las propiedades que debe cumplir cada transacción: Atomicity (Atomicidad), Consistency (Consistencia), Isolation (Aislamiento) y Durability (Durabilidad).
Atomicidad
Propiedad que caracteriza una transacción como indivisible: todas sus operaciones tienen que ejecutarse o ninguna. No puede ocurrir que una parte se ejecute y otra no.
Consistencia
Propiedad que asegura que sólo se empieza aquello que se puede acabar
Aislamiento
Propiedad que asegura que una operación no puede afectar a otras. Esto asegura que la realización de dos transacciones sobre la misma información nunca generará ningún tipo de error
Durabilidad
Propiedad que asegura que una vez realizada la operación, ésta persistirá y no se podrá deshacer aunque falle el sistema
Ámbito
Es el marco en el que se realizan las operaciones. Se utiliza de forma primaria para la ejecución de las transacciones y el tratamiento de errores (excepciones). Un ámbito contiene una o más operaciones. En sistemas de programación un ámbito agrupa a un conjunto de operaciones encerradas entre un BEGIN_TRANSACTION y END_TRANSACTION.
Transacción atómica
Son aquellas que garantizan que cualquier actualización parcial será automáticamente deshecha y todos los efectos de la transacción serán borrados. Se utilizan cuando se requiere capacidad ACID completa, especialmente a la hora de persistir los datos.
Transacción de larga duración
Son aquellas que necesitan ejecutarse por un período de tiempo prolongado y no necesitan capacidad ACID completa, o sea, no necesitan garantizar el aislamiento de datos de otras transacciones. Pueden tener períodos de inactividad debido a la espera de mensajes externos que necesitan ser procesados.
Persistencia
Capacidad de un sistema de mantener en el tiempo los datos o el estado de las operaciones de proceso.
Persistencia de datos
Capacidad de un sistema de persistir los datos resultantes de las operaciones de proceso. Generalmente se realiza en ficheros o bases de datos.
Persistencia de estado
Capacidad de un sistema de persistir en que estado se encuentran las operaciones de proceso. Generalmente se realiza en ficheros o en bases de datos.
Operación de persistir
Operación de un sistema que permite copiar las áreas temporales de información o datos en las áreas definitivas donde se van a persistir. En un sistema de bases de datos corresponde con un COMMIT.
Operación de deshacer persistencia
Operación de un sistema que permite eliminar las áreas temporales de información o datos evitando que sean copiadas en las áreas definitivas donde van a persistir. En un sistema de base de datos corresponde con un ROLLBACK.
Operación de compensación
Operación de un sistema que permite deshacer los cambios de información o datos ya persistidos.
Concurrencia
Propiedad de los sistemas que permiten que múltiples procesos sean ejecutados al mismo tiempo, y que potencialmente puedan interactuar entre sí.
Los procesos concurrentes pueden ser ejecutados realmente de forma simultánea, sólo cuando cada uno es ejecutado en diferentes procesadores. En cambio, la concurrencia es simulada si sólo existe un procesador encargado de ejecutar los procesos concurrentes, ocupándose de forma alternada en uno y otro proceso a pequeñísimos intervalos de tiempo haciendo ver que se están ejecutando a la vez.
Bloqueos
Capacidad de un sistema de persistencia de datos de impedir, bajo condiciones de concurrencia y durante un intervalo de tiempo, que otros procesos modifiquen los datos a los cuáles un proceso determinado está accediendo.
Colisiones
Situación que se produce bajo condiciones de concurrencia cuando dos procesos intentan actualizar los mismos datos.
Bloqueo mutuo(dead-lock)
Situación indeseable que se produce en un sistema bajo condiciones de concurrencia cuando un proceso bloquea un dato A esperando poder actualizar un dato B y al mismo tiempo otro proceso espera que se libere el dato A bloqueando el dato B. Ninguno de los dos procesos prospera debido a que el dato que necesitan está bloqueado por el otro.
Gestor transaccional
Componente de un sistema que se encarga de procesar la información a través de unos elementos o bloques de procesos denominados transacciones. Permite enlazar varias transacciones individuales en una única transacción indivisible, garantizando que todas las transacciones terminen sin errores o que no termine ninguna de ellas. Si algunas operaciones o transacciones terminaron correctamente y otras no, el gestor transaccional deberá devolver la persistencia de datos a su estado original justo como estaba antes de iniciar el proceso y cancelar las operaciones en curso y futuras que formen parte de la transacción general. Los sistemas de gestión de bases de datos incluyen un gestor transaccional.
Sistema centralizado
Conjunto de elementos de proceso de información que residen en la misma máquina lógica compartiendo memoria, CPU y sistema operativo, controla por lo general recursos locales y persisten su estado y los datos producidos en un único sistema de almacenamiento. Un ejemplo clásico es un ordenador central o Host de IBM.
Sistema distribuido
Conjunto de elementos de proceso de información donde cada uno tiene su propia máquina lógica (memoria, CPU y sistema operativo), control de recursos locales y remotos, comunicación entre sí utilizando protocolos de red y mensajes para poder compartir y persistir su estado y los datos producidos en diferentes sistemas de almacenamiento de datos. Un ejemplo clásico son los sistemas Web, donde unos servidores exponen las páginas y el código, otros almacenan los datos y los clientes acceden a través de la red.
Evento
Suceso que ocurre en un sistema cuando se produce una determinada condición.
Manipulador de evento
Código de nuestra aplicación que deseamos ejecutar cuando se activa o “dispara” un determinado evento.
Mensaje
Información que un emisor envía a un receptor a través de un canal de comunicación determinado.
Excepción
Evento que ocurre en un sistema cuando se produce una condición de error, por ejemplo un error de entrada / salida, un fallo de comunicaciones, etc.
Acoplamiento
Característica que mide el grado de dependencia entre los componentes de un sistema
Sistemas acoplados
Sistema donde sus componentes no pueden funcionar parcial o totalmente sin la intervención o participación de otros componentes. Los módulos o rutinas son ejemplos de componentes acoplados.
Sistemas desacoplados
Sistema donde cada uno de sus componentes puede funcionar de forma totalmente independiente. Los servicios pueden ser un ejemplo de componentes que pueden funcionar desacoplados o de forma independiente.
Orquestación
Proceso de alto nivel que permite controlar la ejecución ordenada de transacciones incluyendo mantenimiento de estado, tratamiento de excepciones y acciones de compensación.

 TIPOS DE TRANSACCIONES



Una primera clasificación para estudiar las transacciones es por su duración, en atómicas o de corta duración y las de larga duración. Luego podemos encontrar ambos tipos de transacciones en sistemas centralizados como el ordenador central de IBM o en sistemas distribuidos como en granjas de servidores UNIX o Windows.





Entradas antiguas Inicio