Presentado por:
Las transacciones (o transacciones atómicas) se usan desde hace tiempo en el mundo de las bases de datos para controlar los accesos concurrentes.
Las transacciones son un mecanismo que ayuda a simplificar la construcción de sistemas confiables a través de procesos que proveen soporte uniforme para invocar y sincronizar operaciones
· Operaciones de compartición de datos.
· Aseguramiento de la seriabilidad de las transacciones con otras.
· Atomicidad en su comportamiento.
· Recuperación de fallas provocadas en red y nodos.
El primer protocolo propuesto fue el compromiso en dos fases (2PC, 2 phase commit)
• El coordinador registra la transacción en el log y los participantes.
• El coordinador envía un mensaje prepare a los participantes.
• Cada participante añade su voto al log (sí o no) y fuerza su log a disco.
• A continuación cada participante responde al coordinador con su voto.
• Es un escenario de gestión de procesos de negocio, típicamente implementado con BPEL y servicios web (WS).
• WS para control de transacciones: – WS-Coordination. – WS-Transaction.
• El servicio de viajes realiza reservas reales sobre los otros servicios y, en el caso de ser descartadas, se aplica una compensación al hacer el rollback.
1. Es mas difícil controlar y garantizar la atomicidad en caso de falla, ya que puede haber fallos de los participantes.
2. La detección de deadlocks es muy compleja.
3. Cuando un nodo se cae, las transacciones iniciadas por el que estén ejecutándose en otros nodos quedan huérfanas, y es necesario tener un algoritmo que se encargue de matar estas transacciones huérfanas.
Cuando existen varios procesos en una única maquina decimos que se están ejecutando concurrentemente
Problemas del Control de Concurrencia
-Equivalencia Secuencial
-Operaciones Conflictivas
-Problemas causados por el aborto de las transacciones
Mecanismos de Control de Concurrencia
- Control de Concurrencia a través de bloqueos
- Control Optimista de la Concurrencia
- Ordenación por marcas de tiempo
a.Todos los accesos de una transacción a un objeto particular (operaciones conflictivas) deben secuenciarse con respecto a su acceso por otras transacciones
b. Todos los pares de operaciones conflictivas de dos transacciones se deben ejecutar en el mismo orden sobre los objetos a los que ambas acceden.
•2 operaciones son conflictivas cuando sus efectos combinados dependen del orden en el cual fueron ejecutadas.
•Se consideran conflictivas las siguientes operaciones:
read read ----> no conflictivas
read write ----> conflictivas
write write ----> conflictivas
• Cuando dos o más transacciones son conflictivas es necesario su serialización para asegurar la consistencia de los datos después de su ejecución.
•Las transacciones pueden abortar, ante esta situación surgen otros problemas: lecturas sucias y escrituras prematuras
•Cada vez que una transacción necesita leer o escribir en un objeto, solicita un “lock” sobre el mismo hasta que la transacción culmine exitosamente (commit). Cualquier otra transacción que desee hacer alguna operación sobre dicho objeto tendrá que esperar hasta que el mismo sea desbloqueado.
•Existen dos fases:
- Adquirir bloqueos (Fase de crecimiento)
- Liberar bloqueos (Fase de Acortamiento)
•La porción de objetos a la que se debe secuenciar el acceso debe ser tan pequeño como sea posible.
•Problema de los lectores y escritores
•Nivel de granularidad
•Fineza del grano
•Nivel del ítem, página, archivo o base de datos
•Bloqueos de dos versiones: La activación de bloqueos exclusivos se retrasa hasta que una transacción se consuma
•Bloqueos jerárquicos: Bloqueos de granularidad mixta