Es necesario que la información entre los distintos nodos de un sistema distribuido sean consistenes. Hay distintas técnicas que solucionan el problema de la consistencia.

Consistencia Secuencial

En el estudio de la replicación en las bases de datos distribuidas, se utilizan distintos modelos de consistencia.

Uno de los modelos más fuertes, y que proviene de las bases de datos centralizadas, es el de consistencia secuencial.

Partimos de una serie de procesos que ejecutan instrucciones de lectura y de escritura , sobre una base de datos distribuida.

Se dice que una base de datos distribuida tiene consistencia secuencial cuando “el resultado de cualquier ejecución concurrente de los procesos es equivalente al de alguna ejecución secuencial en que las instrucciones de los procesos se ejecutan una después de otra”.

Atención

Esto no quiere decir que los procesos se ejecuten uno después de otro, sino que una instrucción no comienza hasta que otra no haya terminado de aplicarse en todas las réplicas.

Garantizar la consistencia secuencial es costoso, ya que requiere de mecanismos de sincronización fuertes que aumentan los tiempos de respuesta. Este tipo de consistencia va en contra de la disponibilidad del sistema.

Consistencia Causal

En el modelo de consistencia causal se busca capturar eventos que puedan estar causalmente relacionados.

Si un evento fue influenciado por un evento , la causalidad requiere que todos vean al evento antes que al evento . Dos eventos que no están causalmente correlacionados se dicen concurrentes, y no es necesario que sean vistos por todos en el mismo orden.

En este modelo, “dos escrituras que están potencialmente causalmente relacionadas deben ser vistas por todos en el mismo orden”. Esto implica que todas las replicas recibió la información en el mismo orden, y, por lo tanto, tiene la base de datos en el mismo estado.

Consistencia Eventual

El modelo de consistencia eventual está basado en la siguiente observación

“En la mayoría de los sistemas reales, son pocos los procesos que realizan modificaciones o escrituras, mientras que la mayor parte solo lee, ¿Qué tan rápido necesitamos que las actualizaciones de un proceso que escribe sean vistos por los procesos que leen?”

Estas situaciones pueden tolerar un grado bastante más alto de inconsistencia.

Decimos entonces que una ejecución tiene consistencia eventual cuando “si en el sistema no se producen modificaciones (escrituras) por un tiempo suficientemente grande, entonces eventualmente todos los procesos verán los mismos valores”.

En otras palabras, esto implica que eventualmente todas las réplicas llegaran a ser consistentes (guardaran los mismos valores).