Forbid-Wins Semantics es un enfoque de resolución de conflictos en sistemas distribuidos que prioriza la intención de eliminar o prohibir un elemento. En este modelo, si una operación de 'prohibir' (o 'eliminar') y una operación de 'añadir' (o 'escribir') sobre el mismo elemento ocurren concurrentemente, la operación de 'prohibir' siempre 'gana'. Esto significa que el elemento será eliminado o suprimido del conjunto de datos, incluso si la operación de adición parece haber ocurrido 'después' en términos de reloj lógico o físico. Es una forma de garantizar la eventual eliminación de datos, simplificando la lógica de consistencia en escenarios donde la supresión es crítica.
Este tipo de semántica es particularmente útil en sistemas distribuidos que manejan conjuntos de datos replicados y necesitan resolver conflictos de manera determinista sin coordinación global. Un ejemplo notable es su aplicación en la gestión de 'tombstones' o marcadores de eliminación en bases de datos distribuidas y sistemas de almacenamiento de objetos. Por ejemplo, en sistemas como Apache Cassandra o Riak (que implementa CRDTs como 'OR-Set' con esta semántica), cuando un elemento es eliminado, se escribe un 'tombstone'. Si una operación de escritura concurrente intenta reintroducir el mismo elemento, el 'tombstone' (la operación de 'forbid') prevalece, asegurando que el elemento permanezca eliminado hasta que el 'tombstone' expire o sea recolectado por el garbage collector. Esto simplifica la lógica de replicación y convergencia.
Para un arquitecto, Forbid-Wins Semantics es crucial al diseñar sistemas que requieren una eliminación de datos robusta y consistente en entornos distribuidos, especialmente donde la 'eventual consistencia' es aceptable pero la eliminación debe ser 'fuerte'. La principal ventaja es la simplicidad en la resolución de conflictos para eliminaciones, reduciendo la complejidad de la lógica de fusión. Sin embargo, el trade-off es que puede llevar a la pérdida de datos si una operación de adición es legítima pero se solapa con una eliminación. Es vital considerar si la 'pérdida' de una adición concurrente es aceptable para la simplicidad y la garantía de eliminación. Es ideal para escenarios como listas negras, gestión de membresías donde la exclusión es prioritaria, o sistemas de almacenamiento de objetos donde la eliminación de un objeto debe propagarse de forma fiable.