【发布时间】:2026-01-05 01:05:02
【问题描述】:
假设我们只有两个节点 A 和 B。
当我们在节点A上发出这两个命令时,
$ curl -X PUT -d one .../v1/kv/key1
$ curl -X PUT -d two .../v1/kv/key2
(ie. PUT one key1 happens-before PUT two key2) 然后GET of /v1/kv/key2 在节点B 上返回two,是不是保证节点 B 上的 GET 的 /v1/kv/key1 返回 one ?换句话说,Consul KVS 是否尊重节点 A 上两次写入之间的发生前关系?
Consul 使用共识协议来提供一致性(由 CAP 定义)。
是的,但我的理解是 CAP 定理不涉及多个寄存器。这两个写入可能最终传播到节点 B,但是否保证我们永远不会看到意外的中间状态?
【问题讨论】:
-
AFAIK Consul 只有一个 Raft 日志,这样可以确保无论资源如何,写入始终是相互排序的。仅仅因为共识的性质,人们就不得不竭尽全力使这些写入无序。
-
不确定您是否需要,但 consul 0.7(刚刚发布)也有新的事务键/值 api - github.com/hashicorp/consul/blob/master/…
标签: distributed-system consistency consul eventual-consistency happens-before