假设我们只有两个节点 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,但是否可以保证我们永远不会看到意外的中间状态?