Coherence es la propiedad que garantiza que, en un sistema con múltiples copias de un mismo dato (ya sea por replicación o caching), todas las lecturas de ese dato devuelvan el valor más reciente o un valor consistente según un modelo de coherencia predefinido. A diferencia de la consistencia (consistency) en el contexto de ACID o CAP theorem, que a menudo se enfoca en la visibilidad de las escrituras a través de transacciones, Coherence se centra en la visibilidad de las actualizaciones de un elemento de dato específico en un entorno distribuido o multi-núcleo. Los modelos de coherencia varían desde 'Sequential Coherence' (el más estricto, donde las operaciones parecen ejecutarse en un orden secuencial global) hasta 'Eventual Coherence' (donde las actualizaciones se propagan eventualmente).
En el mundo real, Coherence es fundamental en varios dominios. En arquitecturas de microprocesadores multi-núcleo, los protocolos de 'Cache Coherence' (como MESI, MOESI, o MSI) aseguran que las diferentes CPUs o núcleos que cachean la misma línea de memoria vean siempre la versión más actualizada. En sistemas de almacenamiento distribuido y bases de datos NoSQL, como Apache Cassandra o Amazon DynamoDB, se implementan diferentes niveles de 'Eventual Coherence' para balancear disponibilidad y tolerancia a particiones con la frescura de los datos. Sistemas de 'Distributed Caching' como Redis Cluster o Apache Ignite también deben abordar la coherencia para asegurar que los clientes no lean datos obsoletos de diferentes nodos de caché.
Para un arquitecto de sistemas, comprender Coherence es crucial para diseñar sistemas distribuidos robustos y eficientes. La elección del modelo de coherencia tiene implicaciones directas en la complejidad del sistema, el rendimiento, la disponibilidad y la durabilidad de los datos. Un modelo de coherencia estricto (ej. 'Strong Coherence') puede simplificar la lógica de la aplicación, pero a menudo introduce latencia y reduce la disponibilidad debido a la necesidad de coordinación global. Por otro lado, un modelo de coherencia más relajado (ej. 'Eventual Coherence') puede ofrecer mayor rendimiento y disponibilidad, pero requiere que los desarrolladores manejen la posibilidad de leer datos obsoletos, lo que añade complejidad a la lógica de negocio. Evaluar los 'trade-offs' entre la frescura de los datos, la latencia, el 'throughput' y la complejidad operativa es una decisión de diseño fundamental que impacta directamente la experiencia del usuario y la resiliencia del sistema.