Detección de bloqueos y concurrencia
Bloqueos
Un bloqueo en general
es cuando una acción que debe ser realizada está esperando a un evento. Para
manejar los bloqueos hay distintos acercamientos: prevención, detección, y
recuperación. También es necesario considerar factores como que hay sistemas en
los que permitir un bloqueo es inaceptable y catastrófico, y sistemas en los
que la detección del bloqueo es demasiado costosa.
En el caso específico
de las bases de datos distribuidas usar bloqueo de recursos, peticiones para
probar, establecer o liberar bloqueos requiere mensajes entre los manejadores
de transacciones y el calendarizador. Para esto existen dos formas básicas:
- Autónoma: cada nodo es responsable
por sus propios bloqueos de recursos.
- Una transacción sobre un
elemento con n replicas requiere 5n mensajes
- Petición del recurso
- Aprobación de la petición
- Mensaje de la transacción
- Reconocimientos de
transacción exitosa
- Peticiones de liberación de
recursos
- Copia
Primaria: un nodo primario es responsable para todos los
bloqueos de recursos
- Una transacción sobre un
elemento con n copias requiere 2n+3 mensajes
- Una petición del recurso
- Una aprobación de la
petición
- n mensajes de la
transacción
- n reconocimientos de transacción exitosa
- Una petición de liberación de recurso
Podemos definir que dos operaciones
entran en conflicto que debe ser resuelto si ambas acceden a la misma data, y
una de ellas es de escritura y si fueron realizadas por transacciones
distintas.
Concurrencia
El ejemplo más común de un bloqueo
mutuo es cuando un recurso A está siendo utilizado por una transacción A que a
su vez solicita un recurso B que está siendo utilizado por una transacción B
que solicita el recurso A. Entre los ejemplos específicos para las bases de
datos distribuidas podemos destacar:
Control de concurrencia
- El problema de las actualizaciones perdidas:
cuando dos transacciones concurrentes borran el efecto una de la otra.
- Recuperaciones inconsistentes: acceder a
información modificada parcialmente por una transacción de Ian.
Soluciones
El control de concurrencia y detección
y manejo de bloqueos es un área de mucho estudio en las bases de datos
distribuidas, a pesar de esto no hay ningún algoritmo aceptado para solucionar
el problema. Esto se debe a varios factores de los cuales se consideran a los
siguientes tres los más determinantes:
- La data puede estar duplicada en un BDD, por tanto, el manejador de la BDD es responsable de localizar y actualizar la data duplicada.
2.
Si un nodo falla o la comunicación con un nodo falla mientras se realiza
una actualización, el manejador debe asegurarse de que los efectos se reflejen
una vez el nodo se recupere del fallo.
3.
La sincronización de transacciones en sitios o nodos múltiples es
difícil ya que los nodos no pueden obtener información inmediata de las
acciones realizadas en otros nodos concurrentemente.
Para el control de bloqueos mutuos no
se ha desarrollado ninguna solución viable y la forma más simple y que la
mayoría de productos utilizan es la implementación de un tiempo máximo de
espera en las peticiones de bloqueos.
No hay comentarios:
Publicar un comentario