0

假设我们只有两个节点 A 和 B。

当我们在节点 A 上发出这两个命令时,

$ curl -X PUT -d one .../v1/kv/key1
$ curl -X PUT -d two .../v1/kv/key2

PUT one key1 happens-before PUT two key2)然后GET/v1/kv/key2节点B上返回two,是否保证GET/v1/kv/key1节点B上返回one?换句话说,Consul KVS 是否尊重节点 A 上两次写入之间的发生前关系?

Consul 使用共识协议来提供一致性(由 CAP 定义)。

是的,但我的理解是 CAP 定理没有谈论多个寄存器。这两次写入最终可能传播到节点 B,但是否可以保证我们永远不会看到意外的中间状态?

4

1 回答 1

1

Consul 声称可线性化。“所有服务器都参与 Raft 共识算法,以确保交易以一致、可线性化的方式发生。”

如果 put 的同步顺序与接收顺序不同,则在从另一个节点读取时,您可能会看到它们乱序,违反了线性化保证。因此,应始终按顺序观察它们。

然而,由于以前的线性化违规已经通过减少超时值然后在营销中“解决”,声称 Jepsen从未发现任何错误,我不会指望它是完全线性化的,至少在接下来的几年里。

于 2016-09-21T07:21:50.743 回答