Lamport時間戳與一致性演算法

LightningStar發表於2021-10-14

本文主要參考文獻[1]完成。

宣告:本人僅在部落格園發表了本文章,筆名LightningStar,其他網站均為轉載。

筆記

私以為,論文中作者的核心工作是為分散式系統建立了一種數學模型,並基於這種數學模型提出了相應的分散式演算法。

論文依序論述了偏序關係和全序關係模型在分散式系統中的應用。作者通過一系列規則建立的全序關係模型系統地描述瞭如何在分散式系統中確定執行操作順序的方法,並通過這些規則提出了一種分散式的演算法。最後作者論述了系統外事件會導致分散式系統內的事件的發生會導致依據邏輯時鐘排序的結果違反因果律,因此提出了物理時鐘的概念。

在分析論文之前,我們首先要明晰作者為什麼要建立偏序關係和全序關係。作者的目標是提出一種分散式演算法,而其中的核心問題就是一致性問題。為了解決一致性問題,就必須明確分散式系統中各個程式中的各個事件發生的先後關係和併發關係,併為這些事件建立良好的順序。離散數學中的偏序關係和全序關係恰好就是一種排序模型。關於偏序關係和全序關係進一步的討論將在後文思考章節展開。

到目前為止,我們應當明確,論文的核心目標是對分散式系統中發生的所有事件進行排序,獲得一個確定的事件序列,這樣我們才能夠獲得系統之間一致性的保障。

偏序關係

偏序關係模型可以明確一個程式內部事件發生的先後關係以及具有資訊傳遞時兩個程式中的事件的先後關係(如A程式傳送一個訊息給B程式則A程式發訊息以及發訊息之前的事件一定先於B程式接收訊息以及接收訊息之後的事件)。作者定義了這麼一種二元關係→,→表示“happened before”,定義如下:

  1. 如果事件a、b在一個程式中,如果a發生在b之前則a→b
  2. 如果a是傳送一條訊息的時間,b是接收這條訊息的事件,那麼a→b
  3. 如果a→b和b→c成立,那麼a→c成立。如果兩個事件a和b既不滿足a→b也不滿足b→a則認為兩個事件是併發的。
  4. a→a是不成立的,即不滿足自反性

那麼如何來將這種偏序關係應用到系統中呢?最好的方法就是引入一個全域性時鐘。而物理時鐘本身是有精確度等的問題,作者引入了一個邏輯時鐘。通過對系統中各個程式中的事件打上時間戳,就可以根據事件發生的先後順序進行排序。

顯然,這種排序是滿足‘happened before’的定義的。下面我們看,為什麼說這種排序是偏序的。這是因為當兩個事件具有相同的時間戳的時候,這兩個事件就是不可比的,也即無法進行排序。而全序關係要求的是所有元素都是可比的,這種全域性排序也是我們希望得到的。

偏序關係模型無法描述兩個程式之間的併發事件的順序關係,也就是說,無法對所有的程式的所有的事件按照某個順序進行排序。因此需要將偏序關係擴充到全序關係。

全序關係

在偏序關係的模型中,作者避開了對物理時鐘的描述,引入了邏輯時鐘。在引入了邏輯時鐘之後,我們就可以給每個事件都打上一個時間戳,通過這個時間戳我們就可以將happened before關係擴充到所有程式的所有事件。即,只需要在前文的偏序關係的基礎上,對無法描述happened before關係的併發事件根據邏輯時鐘的時間戳進行排序即可(當時間戳仍然相同時,我們需要程式的偏序關係做判斷)。這樣我們就得到了一個所有事件的排序。

全序關係定義如下:
定義二元關係=>:

  1. 如果事件a、b在一個程式中,如果a發生在b之前則a→b
  2. 如果a是傳送一條訊息的時間,b是接收這條訊息的事件,那麼a→b
  3. a→a是不成立的,即不滿足自反性
  4. 對於兩個程式中的事件a和b如果具有相同的事件戳,那麼通過全域性程式ID進行判斷,如果\(C_i(a) > C_j(b)\),則a=>b

物理時鐘

但是,邏輯時鐘會有一個難以解決的問題,這種問題導致無法正確建立全序關係。即:當有外部因素介入時,會使得兩個程式之間的事件在事實上建立了先後關係,如a在事實上先發生,b在事實上後發生,但是由於資訊傳遞等的原因,會認為b比a先發生。這就需要引入物理時鐘。使用物理時鐘替代邏輯時鐘。

但是物理時鐘有兩個問題,一是物理時鐘的滴答速率不是恆定的,二是物理時鐘需要進行同步校準。

物理時鐘變化率

如果將時鐘Ci作為一個真實的物理時鐘,那麼它必須以一個近似正確的速率來執行,即:

dCitdt-1<k

物理時鐘的變化率必須要儘可能保持恆定。

物理時鐘校準

隨著時間的流逝,物理時鐘會逐漸與真實時間產生偏差。因此每次程式間進行通訊時都要進行校準。且這種校準只能向前校準,不能向後校準。

當程式B收到程式A的訊息之後,程式B就會對當前系統時間進行校正。校準後的時間是max(B程式當前時間,收到訊息的時間戳+資訊傳輸時間)。

擴充

偏序關係和全序關係

偏序關係

給定集合S,\(\le\)是S上的二元關係,若滿足:

  1. 自反性: \(\forall a \in S, a \le a\)
  2. 反對稱性: \(\forall a,b \in S, a \le b 且 b \le a, 則 a = b\)
  3. 傳遞性: \(\forall a,b,c \in S, a \le b 且 b \le c, 則 a \le c\)
    則稱\(\le\)是S上的偏序關係。
    值得注意的是,不要求集合中的任何一對元素之間具有可比較性。

全序關係

給定集合S,\(\le\)是S上的二元關係,若滿足:

  1. 自反性: \(\forall a \in S, a \le a\)
  2. 反對稱性: \(\forall a,b \in S, a \le b 且 b \le a, 則 a = b\)
  3. 完全性: \(\forall a,b \in S, a \le b 或 b \le a\)
    則稱\(\le\)是S上的全序關係。
    值得注意的是,全序關係要求集合中的任何一對元素之間具有可比較性,這是與偏序關係最大的不同。

擴充閱讀

拜占庭將軍問題

到底什麼是一致性

淺析強弱一致性

因果一致性和相對論時空

分散式領域最重要的一篇論文,到底講了什麼

參考文獻


  1. LAMPORT L. Time, clocks, and the ordering of events in a distributed system[J]. Communications of the ACM, 1978, 21(7): 558–565. DOI:10.1145/359545.359563. ↩︎

相關文章