在上一篇文章分散式系統:Lamport 邏輯時鐘中我們知道Lamport 邏輯時鐘幫助我們得到了分散式系統中的事件全序關係,但是對於同時發生的關係卻不能很好的描述,導致無法描述事件的因果關係。向量時鐘是在 Lamport 時間戳基礎上演進的另一種邏輯時鐘方法,它通過向量結構不但記錄本節點的 Lamport 時間戳,同時也記錄了其他節點的 Lamport 時間戳,因此能夠很好描述同時發生關係以及事件的因果關係。
注意:
- 本文中的因果關係指的是時序關係,即時間的前後,並不是邏輯上的原因和結果
- 本文中提及的時間戳如無特別說明,都指的是邏輯時鐘的時間戳,不是物理時鐘的時間戳
為什麼需要向量時鐘
首先我們來回顧一下 Lamport 邏輯時鐘演算法,它提供了一種判斷分散式系統中事件全序關係的方法:如果 a -> b,那麼 C(a) < C(b),但是 C(a) < C(b) 並不能說明 a -> b。也就是說C(a) < C(b) 是 a -> b 的必要不充分條件,我們不能通過 Lamport 時間戳對事件 a、b 的因果關係進行判斷。下面我們舉一個例子來說明。