Consistencia causal


La coherencia causal es uno de los principales modelos de coherencia de memoria . En la programación concurrente , donde los procesos concurrentes acceden a una memoria compartida, un modelo de consistencia restringe qué accesos son legales. Esto es útil para definir estructuras de datos correctas en memoria compartida distribuida o transacciones distribuidas .

La coherencia causal está "disponible en partición" , lo que significa que un proceso puede leer y escribir en la memoria (la memoria está disponible) incluso cuando no hay una conexión de red en funcionamiento (la red está dividida) entre procesos; es un modelo asíncrono. Contrasta con los modelos de consistencia fuerte, como la consistencia secuencial o la capacidad de linealización , que no pueden ser seguros y en vivo bajo la partición, y son lentos para responder porque requieren sincronización.

La consistencia causal se propuso en la década de 1990 [1] como un modelo de consistencia más débil para los modelos de memoria compartida. La consistencia causal está íntimamente relacionada con el concepto de Difusión Causal en los protocolos de comunicación. [2] En estos modelos, una ejecución distribuida se representa como una orden parcial, basada en el  concepto de causalidad potencial de Lamport antes de que sucediera . [3]

La consistencia causal es un modelo de consistencia útil porque coincide con las intuiciones de los programadores sobre el tiempo, está más disponible que los modelos de consistencia fuerte y, sin embargo, proporciona garantías más útiles que la consistencia eventual . Por ejemplo, en bases de datos distribuidas, la consistencia causal respalda el ordenamiento de las operaciones, en contraste con la consistencia eventual . [4] Además, la consistencia causal ayuda con el desarrollo de tipos de datos abstractos como colas o contadores. [5]

Dado que el tiempo y el orden son tan fundamentales para nuestra intuición, es difícil razonar sobre un sistema que no impone la coherencia causal. Sin embargo, muchas bases de datos distribuidas carecen de esta garantía, incluso las que brindan capacidad de serialización. [6] Spanner garantiza la consistencia causal, pero también fuerza una fuerte consistencia, evitando así la disponibilidad bajo la partición . Más bases de datos disponibles que aseguran la consistencia causal incluyen MongoDB y AntidoteDB .

La consistencia causal captura las relaciones causales potenciales entre operaciones y garantiza que todos los procesos observen operaciones relacionadas causalmente en un orden común. En otras palabras, todos los procesos en el sistema están de acuerdo en el orden de las operaciones causalmente relacionadas. Pueden estar en desacuerdo sobre el orden de las operaciones que no están causalmente relacionadas. [1]