可能有人會問,為什麼分布式系統不使用物理時鐘記錄事件?每個事件對應打上乙個時間戳,當需要比較順序的時候比較相應時間戳就好了。
這是因為現實生活中物理時間有統一的標準,而分布式系統中每個節點記錄的時間並不一樣,即使設定了ntp時間同步節點間也存在毫秒級別的偏差。因而分布式系統需要有另外的方法記錄事件順序關係,這就是邏輯時鐘(logical clock)。
圖1lamport時間戳幫助我們得到事件順序關係,但還有一種順序關係不能用lamport時間戳很好地表示出來,那就是同時發生關係(concurrent)。例如圖1中事件b4和事件c3沒有因果關係,屬於同時發生事件,但lamport時間戳定義兩者有先後順序。
vector clock是在lamport時間戳基礎上演進的另一種邏輯時鐘方法,它通過vector結構不但記錄本節點的lamport時間戳,同時也記錄了其他節點的lamport時間戳。vector clock的原理與lamport時間戳類似,使用圖例如下:
基於vector clock我們可以獲得任意兩個事件的順序關係,結果或為先後順序或為同時發生,識別事件順序在工程實踐中有很重要的引申應用,最常見的應用是發現資料衝突(detect conflict)。
分布式系統中資料一般存在多個副本(replication),多個副本可能被同時更新,這會引起副本間資料不一致,version vector的實現與vector clock非常類似,目的用於發現資料衝突。下面通過乙個例子說明version vector的用法:
vector clock只用於發現資料衝突,不能解決資料衝突。如何解決資料衝突因場景而異,具體方法有以最後更新為準(last write win),或將衝突的資料交給client由client端決定如何處理,或通過quorum決議事先避免資料衝突的情況發生。
分布式理論基礎(四)Paxos
分布式理論基礎 一 一致性及解決一致性的兩種方式 2pc和3pc 中介紹了一致性,paxos協議在節點宕機恢復 訊息無序或丟失 網路分化的場景下能保證決議的一致性,是被討論最廣泛的一致性協議。作為解決一致性問題的協議,paxos的核心是節點間如何確定並只確定乙個值 value 在paxos協議裡確定...
專案三。時間類
上機內容 c 程式的編寫和執行 我的程式 作 者 趙玲玲 完成日期 2014 年 3月 12 日 版 本 號 v1.0 輸入描述 略 問題描述 類定義,時間 程式輸出 略 問題分析 演算法設計 略 include using namespace std class time m 0 分鐘為0 s 0...
2014 03 13專案三 時間類
檔名稱 時間類 完成日期 2014年 03月12號 版本號 v1.0 對任務及求解方法的描述部分 輸入描述 無 問題描述 製作乙個時刻表 程式輸出 無 問題分析 演算法設計 include using namespace std class time void add a minute void a...