顺序和因果一致性

时间:2014-11-08 20:57:20

标签: distributed distributed-computing sequential consistency eventual-consistency

对于唯一商品销售数据库,如果我们使用顺序一致性,我们可以保证例如该唯一商品永远不会被双重销售给不同的人。因果一致性能保证我们吗?

如果有一些销售同时开始/结束,会破坏系统吗?

由于商品是唯一的,我们只能销售每件商品中的一件。

谢谢

1 个答案:

答案 0 :(得分:0)

Causual一致性可以保证,如果两个事件通俗相关,那么每个人都会同意它们发生的顺序。它允许对与非通俗相关的事件的排序存在分歧(或同时")。

购买由系统中不同节点执行的项目的两次尝试可能不会引起因果关系 - 买方B几乎肯定不会尝试购买项目因为他已经看到了买家A已经买了它。在一个通用一致的系统中,这意味着这两个事件是同时发生的,并且系统中的不同节点可能不同意它们的相对排序 - A可能认为她的购买尝试首先成功,B可能相信相同的事情。

您可以强制将两次购买尝试与一些额外的最终事件相关联。不要让买家直接购买该物品,而是让他们写下记录,表明他们想要购买物品。将单个节点指定为"所有者"该项目。每当它看到购买欲望记录时,它就会读取该项目的当前状态,并且 - 如果它可用 - 将其出售给给定的购买者。购买者观看该物品,看它是出售给他们还是出售给他人。

这确定了两个事件之间的顺序:要么所有者首先看到A的记录并将其出售给她,要么首先看到B的记录并将其卖给他。这两个事件并不是因果相关的,所以其他节点可能会以相反的顺序看到记录,但这很好 - 他们的意见不算数,只有所有者才这样做。所有者的第二次阅读(应该看到该项目已经售出)与其早期的写入相关,该写入标记了在同一节点上执行的所售商品,因此我们保证它只会出售一次该物品。