本文主要参考文献[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.

Lamport时间戳论文笔记的更多相关文章

  1. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  2. 论文笔记之:Visual Tracking with Fully Convolutional Networks

    论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015  CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...

  3. Deep Learning论文笔记之(八)Deep Learning最新综述

    Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...

  4. Twitter 新一代流处理利器——Heron 论文笔记之Heron架构

    Twitter 新一代流处理利器--Heron 论文笔记之Heron架构 标签(空格分隔): Streaming-process realtime-process Heron Architecture ...

  5. Deep Learning论文笔记之(六)Multi-Stage多级架构分析

    Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些 ...

  6. Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型

    看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...

  7. 论文笔记(1):Deep Learning.

    论文笔记1:Deep Learning         2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...

  8. 论文笔记(2):A fast learning algorithm for deep belief nets.

    论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...

  9. 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN

    论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...

随机推荐

  1. Hibernate之抓取策略

    时间:2017-1-23 19:08 --区分延迟和立即检索1.立即检索    当执行某行代码时,会马上发出SQL语句进行查询.    例如:get()2.延迟检索    当执行某行代码时,不会马上发 ...

  2. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  3. Python - 面向对象编程 - @property

    前言 前面讲到实例属性的时候,我们可以通过 实例对象.实例属性 来访问对应的实例属性 但这种做法是不建议的,因为它破坏了类的封装原则 正常情况下,实例属性应该是隐藏的,只允许通过类提供的方法来间接实现 ...

  4. MySQL-SQL基础

    mysql> use test; Database changed mysql> create table emp(ename varchar(10),hirdate date,sal d ...

  5. 2021年哪个低代码平台更值得关注?T媒体盘点国内主流低代码厂商

    2020年圣诞前夜,国内知名创投科技媒体T媒体旗下的T研究发布了2020中国低代码平台指数测评报告.报告除了对国内低代码行业现状进行总结外,还对主流低代码厂商的市场渗透和曝光进行测评. 报告认为,低代 ...

  6. 约瑟夫环问题详解 (c++)

    问题描述: 已知n个人(以编号0,2,3...n-1分别表示)围坐在一起.从编号为0的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下去,直到圆桌周围的 ...

  7. Python中的文件处理和数据存储json

    前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...

  8. QT学习日记篇-02-QT信号和槽

    课程大纲: <1>给控件改名字 随着UI界面的控件变多,如果使用系统自带的名称,后期会让人不明觉厉,说白了,就是掌握C++的命名规则:易懂,条例清晰,人性化 方法:直接点击控件,进入右侧对 ...

  9. android kotlin determine file type from bytes 根据文件内容识别文件类型,类似python的filetype

    尝试了 URLConnection.guessContentTypeFromStream(ByteArrayInputStream(bytes)) 和 Tika().detect(bytes) 一个识 ...

  10. Sentry Web 性能监控 - Web Vitals

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...