Un CRDT, o Conflict-free Replicated Data Type, es una categoría de tipos de datos distribuidos diseñados para ser replicados en múltiples nodos, permitiendo actualizaciones concurrentes e independientes en cualquier réplica. La propiedad fundamental de los CRDT es que las operaciones de fusión (merge) son conmutativas, asociativas e idempotentes. Esto significa que el orden en que se aplican las actualizaciones o se fusionan los estados no afecta el resultado final, garantizando que todas las réplicas converjan al mismo estado consistente sin necesidad de un coordinador central o de un proceso de resolución de conflictos explícito. Existen dos categorías principales: CRDTs basados en estado (state-based CRDTs o CvRDTs), que transmiten el estado completo de la réplica, y CRDTs basados en operaciones (operation-based CRDTs o OpCRDTs), que transmiten las operaciones individuales.
Los CRDTs han encontrado aplicación en una variedad de sistemas distribuidos donde la colaboración en tiempo real y la alta disponibilidad son críticas. Ejemplos notables incluyen la edición colaborativa de documentos en tiempo real, como la utilizada en herramientas como Figma o Google Docs (aunque Google Docs usa un enfoque diferente, los CRDTs son una alternativa viable y se usan en otros editores colaborativos como Atom y VS Code a través de extensiones). Bases de datos distribuidas como Redis Enterprise (con su módulo CRDT) y Riak (que fue pionero en su uso) los emplean para gestionar la replicación de datos con alta disponibilidad y tolerancia a particiones. También son fundamentales en sistemas de chat y mensajería que requieren sincronización offline y online, y en plataformas de juegos multijugador para mantener el estado del juego consistente entre jugadores.
Para un arquitecto de sistemas, los CRDTs son una herramienta poderosa para diseñar sistemas distribuidos que requieren alta disponibilidad, tolerancia a fallos y colaboración en tiempo real sin sacrificar la consistencia fuerte. Permiten construir sistemas "eventually consistent" que, en la práctica, se comportan como "strongly consistent" una vez que todas las actualizaciones se han propagado y fusionado. El principal trade-off es la complejidad de la implementación inicial y, en el caso de los CvRDTs, el tamaño del estado que debe ser transmitido, lo que puede impactar el ancho de banda de la red. Sin embargo, eliminan la necesidad de complejos algoritmos de consenso como Paxos o Raft para la consistencia de los datos replicados, simplificando el diseño de sistemas que operan en entornos con particiones de red o alta latencia. La elección entre OpCRDTs y CvRDTs dependerá de los patrones de comunicación y las restricciones de ancho de banda del sistema.