分布式系统中连贯性coherence和一致性consistency的区别?


连贯性coherence确保可以按顺序看到写入内容(带有业务语义);一致性consistency确保可以在不同位置按有意义的顺序查看写入的内容(无关乎上下文或语义)。
分布式算法CRDT不保证连贯性coherence,而是保证一致性。
当CRDT用于文档编辑时,如果这些编辑是普通的人工编辑,则结果在句子级别上通常可能是连贯的,但在整个文档级别上却往往不是。
举一个简单的例子,如果一个人在整个文档中更改了一个常用术语,而另一个人在编写新内容时在同样的地方却还是使用了旧的术语,那么即使所有用户在语义上进行了一致的更改,该文档在语义上也是不连贯的。现在看到的是相同的最终一致的文档。
看这个例子:请看短语:“张三的墙壁上有一只吉他”。A将其改写为“张三的墙壁上有一只吉他,这是他去年夏天钓鱼时获得的奖杯”,而B则单独修改为“张三很喜欢音乐,把他最喜欢的吉他挂在了墙上”。CRDT忠实地应用了这两种编辑,并将冲突解决为:“张三很喜欢音乐,把他最喜欢的吉他挂在了墙上,这是他去年夏天钓鱼时获得的奖杯。”
在几乎任何系统中,语义数据都不能由任何可用的数据模型完全表示。任何自动解决冲突的模型,无论多么智能,都可能导致语义上无意义的合并。
CRDT非常非常酷。但是,人们常常认为他们可以代替手动审核和解决冲突。其实不是。