¿Qué es la consistencia eventual?

La consistencia 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 todas las réplicas del programa sean consistentes. El concepto de consistencia 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 final se logra mediante un proceso de tres pasos. Primero, la información distribuida está disponible en el sistema; a esto le sigue un estado suave, en el que diferentes usuarios pueden seguir trabajando con diferentes versiones de los datos; y finalmente se logra la coherencia, y todas las computadoras tienen acceso a datos idénticos.

Una de las formas más visibles en que se aplica la coherencia final 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 se habrán actualizado a la última versión. Esta es la premisa detrás del estado de consistencia eventual: con el tiempo suficiente, cualquier actualización se propagará completamente por todo el sistema.

A medida que el sistema trabaja hacia una eventual coherencia, los conflictos son inevitables. Estos ocurren cuando la versión del programa o la información que se encuentra actualmente en la computadora no coincide con la «versión del modelo» del programa. Por lo general, los programas se establecen para reconocer estos conflictos y gestionarlos. Cuando los archivos en una computadora específica son más antiguos que la última versión del modelo del software o los datos en cuestión, el sistema generalmente le pedirá al usuario que inicie una actualización para resolver la disparidad.

Hay tres métodos posibles disponibles para llevar a cabo 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 coherente. 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 ventajas e inconvenientes.

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 asíncrona, la reparación tiene lugar cuando no se produce una operación de lectura ni escritura, lo que lleva al consumo de ciclos inactivos en la CPU.