Replication
什麼是版本向量?
伙計們,我目前正在通過“設計數據密集型應用程序”一書了解分佈式數據系統。
我想我對單個副本系統中的版本號如何允許伺服器檢測並發寫入有非常深刻的理解
*
。作者從這個例子開始,因為一旦你了解了單副本系統,將這種理解擴展到多領導者或無領導者複製系統應該是顯而易見的,但對我來說根本不明顯。多個副本可以處理寫入請求的系統中的版本號如何工作?換句話說,什麼是版本向量?
*
在單副本系統中,每次寫入都伴隨著一個版本號。此版本號是寫入所基於的數據的版本。如果寫入基於該鍵的數據的版本 1,並且版本 2 已經存在,我們知道傳入的寫入與版本 2 並發。傳入的寫入只能覆蓋版本 1 中的數據,因為它不了解版本 2 中的數據。例如,版本 1 是$$ eggs $$, 版本 2 是$$ eggs $$和$$ milk $$. 傳入的寫入想要將此密鑰更新為$$ eggs, bacon $$. 此密鑰的第 3 版將變為$$ eggs, bacon $$和$$ milk $$. 傳入的寫入無法覆蓋$$ milk $$因為它甚至不知道$$ milk $$是鍵中的一個值。
版本向量是集群中每個節點將其本地版本號傳遞給集群中所有其他節點的一種方式。它們也被稱為矢量時鐘。
本質上,當節點 A 將消息傳遞給另一個節點 B 時,A 在該消息中包含它所知道的關於集群中所有節點的版本號的資訊。因為它包含所有其他節點的值,所以它是版本號的數組或向量。節點 B 使用此資訊來更新它對整個集群的版本號的了解。它可以使用此資訊來計算整個集群中事件的全域排序。
反過來,節點 B 在發送給其他節點(包括節點 A)的消息中包含此更新資訊。
搜尋矢量時鐘。有很多解釋,既有學術性的,也有實踐性的。