¿Qué es la consistencia eventual?

La coherencia eventual requiere que todos los historiales de operaciones de lectura y escritura vistos por cualquier cliente de un sistema distribuido sean compatibles con alguna ejecución secuencial (es decir, donde todas las lecturas y escrituras se ejecutan una por una, no simultáneamente), lo que mantiene la siguiente propiedad:

(sea W (L, X, n) _t una escritura del valor X en la ubicación L por el nodo n en el tiempo t, y R (L, n) _t sea una lectura de L por el nodo n en el tiempo t)

Sea W (L, X, n ‘) _ t la última escritura en la ubicación L. Entonces, para todo n, existe un tiempo t (n)> t st R (L, n) _t (n) = X.

Esta es una propiedad vital del ‘registro’ subyacente que el sistema distribuido está modelando. Informalmente, dice que si realiza una escritura en una ubicación determinada, eventualmente todos los demás nodos podrán leer esa escritura, suponiendo
que ninguna otra escritura suceda antes de que sea visible para ti.

En muchos casos, el nodo n ‘que emitió la escritura sufrirá un retraso antes de que las lecturas posteriores devuelvan el valor escrito. Entonces, la consistencia eventual puede romper la relación ‘causal’ de la ejecución de un solo nodo (para que las operaciones posteriores puedan ver los resultados de operaciones anteriores).

Dado que la demora entre una escritura y su visibilidad es arbitraria (y puede cambiar para diferentes nodos), la consistencia eventual permite algunos historiales de ejecución contraintuitivos que no ocurren con historiales estrictamente secuenciales consistentes. Es por eso que no hacemos que todo sea finalmente consistente 🙂

(Tenga en cuenta que el tiempo aquí realmente se refiere al orden de una operación en el historial secuencial de ejecución, no a un reloj global. Por lo tanto, hay una operación en t = 0, una operación en t = 1, etc.).

“Pasemos por un escenario del mundo real para demostrar modelos de consistencia que encontramos en nuestro día a día.
Consistencia eventual
Mi esposa y yo estábamos sentados en nuestra sala, viendo televisión y navegando en nuestras computadoras portátiles, comparto un meme interesante en su muro de Facebook, y mientras me río del meme, le pido que lo vea. Ella, que inició sesión en su propia computadora portátil con su propia cuenta de usuario, va a su muro de Facebook, pero no encuentra nada allí. Perpleja, se queja de que no ve nada en su pared y me pide que confirme si envié el meme. Le digo que espere un poco y aparecerá. Ella espera un poco y en un minuto más o menos, ve el meme y se echa a reír.
Lo que sucedió aquí fue un ejemplo de un modelo de consistencia “flojo” llamado consistencia eventual, donde se garantiza que los datos serán consistentes eventualmente. Yo y mi esposa estábamos mirando la misma página desde diferentes computadoras, pero el contenido de la página era diferente para nosotros. pero eventualmente ambos obtuvimos la última versión de la página. Esto se debió posiblemente a que Facebook podría usar un modelo eventual consistente para publicaciones en el muro, lo que significa que eventualmente todas las copias de los datos tendrían el mismo valor, pero hasta entonces, cada copia de los datos podría estar fuera de sincronización. Para algo así como una publicación en el muro, la consistencia eventual parece ser algo razonable de hacer, porque considere un billón de usuarios totales de Facebook, un subconjunto de los cuales está creando publicaciones en un momento dado, creando un sistema rentable y confiable que pueda almacenar Esta gran cantidad de datos y está disponible también requiere que Facebook haga un intercambio de ingeniería para no garantizar la consistencia inmediata. ¿Qué les compensa esta ingeniería? No tienen que escribir la publicación de un usuario en todas las copias de los datos del usuario de inmediato; pueden devolver el éxito al usuario siempre que puedan estar relativamente seguros de que los datos no se perderán (por ejemplo, el éxito del almacenamiento en una mayoría como 2 de 3 copias). Esto reduce la carga de escritura en su sistema en un tercio y el sistema puede recuperar la tercera copia de manera perezosa. Del mismo modo, el lector puede ir solo a una de las copias y llevar los datos al cliente, en lugar de tratar de leer todas las copias y descubrir una mayoría. Esto también reduce la carga de lectura en el sistema. Por lo tanto, vemos cómo una compensación por la consistencia eventual reduce la carga en el sistema, esencialmente mejorando la disponibilidad del sistema, ya que estas capacidades de escritura y lectura no utilizadas pueden ser utilizadas por otras operaciones “.
Fuente: Modelos de consistencia – Consistencia fuerte y eventual