De Wikipedia, la enciclopedia libre
En Informática, en un sistema distribuido, tales como una memoria compartida distribuida o almacenes de datos distribuido, tales como una base de datos, sistema de archivos, caché web o sistemas de replicación optimista, hay una serie de posibles modelos de consistencia de datos. Se dice que un sistema soporta un determinado modelo, si las operaciones en memoria siguen normas específicas. La consistencia de los datos es definida entre el programador y el sistema, que garantiza que si el programador sigue las reglas, la memoria será consistente y el resultado de las operaciones de memoria será predecible.
Los lenguajes de alto nivel, tales como C, C++ y Java, respetan parcialmente este modelo traduciendo operaciones de memoria en operaciones de bajo nivel para preservar la memoria semántica. Para mantener el modelo, los compiladores pueden reordenar algunas instrucciones de memoria, y las llamadas a las bibliotecas como "pthread_mutex_lock()", encapsular la sincronización necesaria.
A continuación se muestran los distintos tipos, ordenados según la fuerza de la consistencia que ofrecen:
Los sistemas con consistencia linealizable presentan las características de garantía de ejecución de operaciones a tiempo real, respetando su orden, siendo que este orden también se debe preservar de manera global en las operaciones que hacen overlapping. Las ventajas que posee sobre la secuencialidad es que mantiene la ordenación a tiempo real de las operaciones, lo que se asemeja más al concepto de atomicidad. Además, esta consistencia se mantiene si se combinan implementaciones linealizables separadas de dos objetos.
Las operaciones de lectura siempre devolverán lo último escrito en memoria, independientemente de cuando se haya solicitado. Las siguientes peticiones de lectura devolverán el mismo resultado siempre que no se haya vuelto a escribir en memoria, independientemente del cliente.
La consistencia linealizable es una forma de consistencia secuencial con restricción de tiempo real.[1]
Se produce consistencia secuencial cuando todas las operaciones de datos de diferentes sistemas aparentan ser atómicos, como si ocurriesen todas en un sistema uniprocesador ejecutadas de manera secuencia,con un orden que esté en concordancia con aquel visto en los procesos individuales.[2]
En varios sistemas, es decir diferentes procesadores, esto puede dejar de cumplirse ya que el acceso puede ocurrir en diferente orden.
La consistencia secuencial trata de corregir esto para que las operaciones aparenten atomicidad.
Para obtener la consistencia secuencial, se requiere que las operaciones de memoria estén completadas antes de acceder a la siguiente instrucción según el orden del programa. Es también necesaria la serialización de las escrituras a memoria: las escrituras deberán estar finalizadas, y su valor no podrá ser devuelto por una lectura hasta que la escritura sea visible para todos los sistemas[3].
La consistencia secuencial de una implementación de dos objetos con consistencia secuencial no es garantizada,sin embargo se puede obtener una concurrencia elevada y mayor rendimiento que en la consistencia linealizable
La consistencia secuencial puede producir una pérdida de optimización al no forzar el orden estricto.
En todo caso, se debe respetar siempre el orden aparente de programa para el usuario en contra del tiempo real de ejecución.
La consistencia de causalidad es un modelo de consistencia más fuerte que otros modelos como la consistencia eventual, pero más débil que los modelos secuenciales o los modelos linealizables. Es el modelo de consistencia más fuerte posible en sistemas distribuidos tolerantes a fallos.[4] Los modelos más fuertes traen consigo unas mayores garantías de seguridad en el orden de los procesos, a cambio de una notable pérdida de rendimiento, demostrado por el teorema CAP, el cual prueba que es imposible garantizar simultáneamente de consistencia y disponibilidad o latencia en un sistema distribuido.
La consistencia de causal permite una mayor eficiencia al ser posible más ejecuciones, manteniendo un modelo viable para los programadores.[5]
En la consistencia causal no se podrá leer un dato hasta que todas las operaciones que hayan llevado a su escritura o actualización sean visibles. Un sistema será consistente de manera causal, pues, si siguen el principio de causalidad, tal que si se cumple la operación de escritura a, y lectura b, a→b, b obtendrá el dato escrito por a.
Seamless Wikipedia browsing. On steroids.