分散式系統 Distributed Systems_Time, clocks, and ordering of events_Week4筆記_part2.Lamport跟Vector Clocks計算
做個課堂筆記紀錄,因為坐在教室後面會照到前面同學後腦杓。歹勢.... 分散式系統中的 Lamport Clock 與 Vector Clock Lamport Clock(Lamport 時鐘) 用途: 用來在分散式系統中決定事件(Event)的先後順序,避免物理時鐘不同步所造成的混亂。 結構與運作: 每個節點都維護一個整數計數器(Lamport Clock)。 當本地有事件發生時,計數器加一。 發送訊息時,附加目前的 Lamport Clock 值。 接收訊息時,將本地計數器設為收到時鐘值與本地時鐘的最大值後再加一。 Vector Clock(向量時鐘) 用途: 用來追蹤每個節點彼此之間的事件先後關係,比 Lamport Clock 更進一步,可以判斷事件是否真正平行(concurrent)。 結構與運作: 每個節點都維護一個長度為 N(節點數)的向量,每個元素分別表示此節點對自己和其他節點事件次數的看法。 本地事件發生時,將自己對應的一格加一。 發送訊息時,附上自己的 Vector Clock(整個向量)。 接收訊息時,將收到的 Vector Clock 與本地 Vector Clock 逐格比較,大者為新值,再把自己格加一。 總結 Lamport clock 只能粗略判斷時間順序(數字比大小),但無法區分平行事件或真實先後。 Vector clock 若 v1 < v2(全小於),就可以明確判定 v1 happens-before v2;若無法比較,就是平行事件。 第10題.一起修課的班代幫忙上台作答-Lamport Clock 給出四個節點 (A、B、C、D) 之間的訊息交換(m1 ~ m9),要求在每個訊息送出或接收事件標記 Lamport 時間戳(timestamp)。 初始值:每個節點的 Lamport Clock 都是 0。 送出訊息:本地 Lamport Clock +1,送出訊息並將其值作為 timestamp 附加在消息上。 接收訊息:收到訊息後,把本地 Lamport Clock 更新為「max(本地, 收到的) + 1」。 節點 A 發送 m1、m2、m3,分別遞增自己的 Lamport Clock。 B, C, D 分別在收到訊息後按規則更新 Lamport Clock(最大值+1)。 每遇到接收/發送動作,都照規則隨時更新時間。 ...