Lamport時間戳與一致性算法


本文主要參考文獻[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. ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM