Lamport 逻辑时钟

    分布式系统中按是否存在节点交互可分为三类事件,一类发生于节点内部,二是发送事件,三是接收事件。注意: 以下文章中提及的时间戳如无特别说明,都指的是Lamport 逻辑时钟的时间戳,不是物理时钟的时间戳。

 

    如果a在进程Pi中,b在进程Pj中,Ci(a) = Cj(b)且i < j,那么a在b之前。形式化一点,我们可以把系统事件E上的全序关系“=>”定义为:

    假设a是Pi中的事件,b是Pj中的事件,那么:a => b当且仅当以下两个条件之一成立:

    1. Ci(a) < Cj(b);

    2. Ci(a) = Cj(b) 且 i < j;

    Lamport 逻辑时钟原理如下:

Lamport 逻辑时钟_第1张图片

  1. 每个事件对应一个Lamport时间戳,初始值为0;
  2. 如果事件在节点内发生,本地进程中的时间戳加1;
  3. 如果事件属于发送事件,本地进程中的时间戳加1并在消息中带上该时间戳;
  4. 如果事件属于接收事件,本地进程中的时间戳 = Max(本地时间戳,消息中的时间戳) + 1。

你可能感兴趣的:(分布式一致性)