0

假設我們只有兩個節點A和B.Consul鍵值存儲是否可以保證在使用兩個不同的鍵進行兩次寫入時的順序?

當我們發起的節點A這兩個命令,

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

PUT one key1之前發生PUT two key2),然後GET節點B上的/v1/kv/key2返回two,是否保證GET/v1/kv/key1在節點B上返回one?換句話說,Consul KVS榮譽在節點A上的兩次寫入之間的關係之前發生了嗎?

領事使用一致性協議,以提供一致性(通過CAP所定義的)。

是的,但我的理解是CAP定理不談論多個寄存器。這兩個寫入可能最終傳播到節點B,但它是保證我們永遠不會看到意外的中間狀態?

+1

AFAIK Consul只有一個Raft日誌,這樣可以確保無論資源如何,寫入都將相互排列。僅僅因爲共識的本質,人們就不得不使自己的寫作無序。 – kuujo

+1

不知道是否需要你,但consul 0.7(剛剛發佈)也有新的交易密鑰/值API - https://github.com/hashicorp/consul/blob/master/CHANGELOG.md#070-september- 14-2016 – deniszh

回答

1

領事聲稱線性化。 「所有服務器都參與Raft共識算法,以確保交易以一致的,可線性化的方式進行。」

如果按照與接收到的順序不同的順序同步順序,則在從另一個節點讀取時,可能會看不到它們,違反了線性化保證。因此,他們應該始終遵守秩序。

但是,由於之前的線性化違規已被decreasing a timeout value「解決」,然後躺在市場營銷部門claiming Jepsen never found any bugs中,至少在未來幾年,我不會指望它完全線性化。

+0

我對超時的東西感興趣。我可以知道哪些問題與它有關嗎? – nodakai

+0

@nodakai看看https://aphyr.com/posts/316-jepsen-etcd-and-consul和https://youtu.be/QdkS6ZjeR7Q?t=1481 –

相關問題