http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf

分布式系统的时钟同步是一个非常困难的问题,this paper致力于分布式系统的逻辑时钟同步问题。

文中有个结论值得注意:
In a distributed system, it is important to realize that the order in which events occure is only a partial ordering. 
分布式系统中事件的时序只能是偏序(不可能为全序)。

文中使用了一种确认两个事件a、b是否存在先后顺序的简单有效的方法:在时空图中如果能找到从a到b的时间线,则认为a、b纸件存在先后顺序;否则,认为他们是同时发生的(无法判断先后则认为同时发生)。

文中介绍了一种简单的分布式逻辑时钟系统,不同进程间通过事件中的时间戳来缺点事件发生的先后,它是偏序的;同时指出,如果要构建全序的时钟系统,需要一种方法定义在偏序中被认定为“concurrent“的事件的先后;同一套系统,使用不同的方法可能得到不同的先后顺序;

文中证明了一种使用有偏差的物理始终,构建一个分布式始终,它能达到的偏差的理论上限;这个误差与同步时间间隔、两个节点间的不可预见延时成正比;

文中提出了分布式系统中对互斥资源管理正确性的三个条件(充分条件,没有证明是必要条件):

1.  a process which has been granted the resource MUST release it before it can be granted to another process;
如果一个资源已经分配给了某个进程,那么在分配给其他进程前必须先释放这个资源;(可能主动也可能被动释放,这个确保了资源的独占性);

2. different requests for the resource MUST be granted in the order in which they are made
获取资源的顺序必须与请求的顺序相同。(这是非常困难的条件)

3. if every process which is granted the resource eventually release it, then every request is eventually granted.
如果最终每个获取到资源的进程都释放了请求,那么每一个请求都已经获取到了资源;(这是条件,不是结果)

文中提出了一种能满足上述三个条件的实现方法:

前提假设(不是必要的假设,只是为了简化问题):

1.对于任何两个进程pi和pj,消息的发送和接收拾有序的(使用tcp即可做到这点);
2.消息最总都能发送成功,不会丢失(tcp的重传也能做到这点);
3.每个进程p都维护一个请求消息队列,各个队列之间是完全独立运作的;


算法步骤:
1. pi为了请求资源,给其他的每个进程发送一个消息提:Ti:Pi,其中Ti是发送的本地时间戳;然后将这个消息放入自己的消息队列中;
2.Pj收到Tm:Pi时,将这个消息放入自己的消息队列中,并发送一个带时间戳的ack给Pi(如果Pj已经发送过一个比Tm更晚的ack,这里不需要发送;注意早晚的判断使用的事Pi的时间戳比较的)
3.释放资源时,Pi从队列中删除所有Tm:Pi请求消息,并发送一个带时间戳的释放资源消息给所有的进程;
4.当Pj接收到Pi的释放消息时,它删除队列中所有的Tm:Pi请求消息;
5.任何进程Pi能获取到资源的条件是:1)在它的消息队列中,才能在Tm:Pi请求消息,且这个消息在其他所有消息之前;2)Ti从每个进程那里接收到了比Tm更晚的消息;

其实上面的算法要求,每个进程要获取到资源,都要知道在它获取的事件点之前,系统其他所有节点是否有申请资源。

Note: Time clocks and the ordering of events in a distributed system的更多相关文章

  1. 译《Time, Clocks, and the Ordering of Events in a Distributed System》

    Motivation <Time, Clocks, and the Ordering of Events in a Distributed System>大概是在分布式领域被引用的最多的一 ...

  2. Time, Clocks, and the Ordering of Events in a Distributed System

    作者:Leslie Lamport(非常厉害的老头了) 在使用消息进行通信的分布式系统中,使用物理时钟对不同process进行时间同步与事件排序是非常困难的.一是因为不同process的时钟有差异,另 ...

  3. 【SaltStack官方版】—— Events&Reactor系统—EVENT SYSTEM

    Events&Reactor系统 EVENT SYSTEM The Salt Event System is used to fire off events enabling third pa ...

  4. Method and apparatus for providing total and partial store ordering for a memory in multi-processor system

    An improved memory model and implementation is disclosed. The memory model includes a Total Store Or ...

  5. 「2014-2-23」Note on Preliminary Introduction to Distributed System

    今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...

  6. mysqldump: Couldn't execute 'show events': Cannot proceed because system tables used by Event Schedu

    最近将老版本的mysql 实例倒入 percona 5.5.30,使用的是线上的全备,结果将mysql 库下的表也倒入了,这下可悲剧了,备份报错. 没办法,将mysql库下的数据倒出来,清空,再倒入p ...

  7. Note on Preliminary Introduction to Distributed System

    今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...

  8. 分布式系统(Distributed System)资料

    这个资料关于分布式系统资料,作者写的太好了.拿过来以备用 网址:https://github.com/ty4z2008/Qix/blob/master/ds.md 希望转载的朋友,你可以不用联系我.但 ...

  9. Networked Graphics: Building Networked Games and Virtual Environments (Anthony Steed / Manuel Fradinho Oliveira 著)

    PART I GROUNDWORK CHAPTER 1 Introduction CHAPTER 2 One on One (101) CHAPTER 3 Overview of the Intern ...

随机推荐

  1. uoj #46[清华集训2014]玄学

    uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...

  2. 多Y轴示例

    //多Y轴示例 <template> <div id="main" :style="{width:'1000px',height:'500px' }&q ...

  3. NLP 基于kashgari和BERT实现中文命名实体识别(NER)

    准备工作,先准备 python 环境,下载 BERT 语言模型 Python 3.6 环境 需要安装kashgari Backend pypi version desc TensorFlow 2.x ...

  4. mysql system lock

    MySQL从库show processlist出现system lock的原因以及解决方法有哪些? 由于大量的小事物如UPDATE/DELETE table where一行数据,这种只包含一行DML ...

  5. 2019.9.20使用kali中的metasploi获取windows 的权限

    1 kali 基于debin的数字取证系统,上面集成了很多渗透测试工具,其前身是bt5r3(bractrack) 其中Metasploit是一个综合利用工具,极大提高攻击者渗透效率,使用ruby开发的 ...

  6. kubernetes创建资源的两种方式

    一.创建方式分类: 命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1.用 kubectl 命令行的方式直接创建,比如: kubectl run httpd-app --image ...

  7. WebView net::ERR_CLEARTEXT_NOT_PERMITTED&&net::ERR_INTERNET_DISCONNECTED

    参照博客:https://blog.csdn.net/qq_33721320/article/details/84400825 测试Android 中WebView功能时,发现了这个问题: 解决的方式 ...

  8. 阅读之MySQL数据库分表

    移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦数据量越来越大,系统响应会变慢,TPS直线下降,直至 ...

  9. Lettuce连接池——解决“MXBean already registered with name org.apache.commons.pool2:type=GenericObjectPool,name=pool”

    LettuceConfig: package com.youdao.outfox.interflow.config; import io.lettuce.core.support.Connection ...

  10. Python CGI编程Ⅳ

    使用POST方法传递数据 使用POST方法向服务器传递数据是更安全可靠的,像一些敏感信息如用户密码等需要使用POST传输数据. 以下同样是hello_get.py ,它也可以处理浏览器提交的POST表 ...