¿Qué es la consistencia eventual?
La coherencia eventual es un modelo de programación en el que los programadores suponen que durante un período de tiempo suficientemente largo y sin cambios en un sistema, la versión actual de un programa en particular eventualmente se distribuirá hasta que cada réplica del programa sea consistente. El concepto de coherencia eventual se utiliza en métodos de programación como la replicación optimista, la memoria compartida distribuida y las transacciones distribuidas. Con respecto a las bases de datos, la consistencia eventual se logra a través de un proceso de tres pasos. Primero, la información distribuida está disponible en el sistema; Esto es seguido por un estado suave, en el que diferentes usuarios pueden seguir trabajando con diferentes versiones de los datos; y finalmente se logra la consistencia, y todas las computadoras tienen acceso a datos idénticos.
Una de las formas más visibles de aplicación de la coherencia eventual tiene que ver con las actualizaciones de software distribuidas en línea. Durante los primeros segundos después del lanzamiento de una actualización, nadie la tendrá; no ha pasado suficiente tiempo para que los usuarios del software descarguen e instalen la actualización. Este es el estado "disponible"; la actualización existe, pero aún no se ha distribuido. Con el tiempo, a medida que los usuarios descarguen la actualización, algunos la tendrán y otros no. Sin embargo, después de que haya pasado suficiente tiempo, todos los que utilicen el software habrán actualizado a la última versión. Esta es la premisa detrás del estado de consistencia eventual: dado el tiempo suficiente, cualquier actualización se propagará completamente por todo el sistema.
A medida que el sistema trabaja hacia la consistencia eventual, los conflictos son inevitables. Esto ocurre cuando la versión del programa o la información actualmente en la computadora no coincide con la "versión del modelo" del programa. Los programas generalmente se configuran para reconocer tales conflictos y manejarlos. Cuando los archivos en una computadora específica son más antiguos que la última versión del software o los datos en cuestión, el sistema generalmente solicitará al usuario que inicie una actualización para resolver la disparidad.
Hay tres posibles métodos disponibles para efectuar estas resoluciones: reparación de escritura, reparación de lectura y reparación asincrónica. Todos estos métodos alinean la versión del programa o los datos con el modelo consistente. La diferencia clave entre estos tiene que ver con la forma en que el sistema cronometra la operación de reparación. Todas estas operaciones tienen beneficios y desventajas.
En una reparación de escritura, los cambios en el código almacenado en la computadora se realizan durante una operación de escritura, cuando la computadora ya está escribiendo algo en el disco duro del sistema. Esto repara la inconsistencia, alineando el programa o los datos con el modelo, pero también ralentiza temporalmente la operación de escritura original. Para una reparación de lectura, la operación correctiva ocurre durante un ciclo de lectura desde el disco duro. Esto, a su vez, ralentiza la operación de lectura. En la reparación asincrónica, la reparación tiene lugar cuando no se produce una operación de lectura o escritura, lo que lleva al consumo de ciclos inactivos en la CPU.