Note: Time clocks and the ordering of events in a distributed system
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的更多相关文章
- 译《Time, Clocks, and the Ordering of Events in a Distributed System》
Motivation <Time, Clocks, and the Ordering of Events in a Distributed System>大概是在分布式领域被引用的最多的一 ...
- Time, Clocks, and the Ordering of Events in a Distributed System
作者:Leslie Lamport(非常厉害的老头了) 在使用消息进行通信的分布式系统中,使用物理时钟对不同process进行时间同步与事件排序是非常困难的.一是因为不同process的时钟有差异,另 ...
- 【SaltStack官方版】—— Events&Reactor系统—EVENT SYSTEM
Events&Reactor系统 EVENT SYSTEM The Salt Event System is used to fire off events enabling third pa ...
- 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 ...
- 「2014-2-23」Note on Preliminary Introduction to Distributed System
今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...
- mysqldump: Couldn't execute 'show events': Cannot proceed because system tables used by Event Schedu
最近将老版本的mysql 实例倒入 percona 5.5.30,使用的是线上的全备,结果将mysql 库下的表也倒入了,这下可悲剧了,备份报错. 没办法,将mysql库下的数据倒出来,清空,再倒入p ...
- Note on Preliminary Introduction to Distributed System
今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...
- 分布式系统(Distributed System)资料
这个资料关于分布式系统资料,作者写的太好了.拿过来以备用 网址:https://github.com/ty4z2008/Qix/blob/master/ds.md 希望转载的朋友,你可以不用联系我.但 ...
- 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 ...
随机推荐
- 关于redis的几件小事(四)redis的过期策略以及内存淘汰机制
1.数据为什么会过期? 首先,要明白redis是用来做数据缓存的,不是用来做数据存储的(当然也可以当数据库用),所以数据时候过期的,过期的数据就不见了,过期主要有两种情况, ①在设置缓存数据时制定了过 ...
- javaScript基本使用api
基本方法 isArray() 判断数组 isArray() 方法用于判断是否是数组(有兼容性) 语法:Array.isArray(arr) 返回值:是数组,返回true.不是数组,返回false. i ...
- c++实现服务器和多个客户端的实时群聊通信
我们通过TCP/IP来实现多人聊天室,如果租一个服务器我们就可以实现全网的多人聊天室(不懂tcp/ip的点进来https://www.cnblogs.com/yskn/p/9335608.html)! ...
- 解决Redis中文乱码问题
启动客户端的时候添加 --raw 选项即可 wangyulong@code-local:~$ redis-cli 127.0.0.1:6379> set key1 '上海' OK 127.0.0 ...
- magento获取当前栏目ID号与栏目名称函数
Magento获取当前栏目ID:$_cat= new Mage_Catalog_Block_Navigation();$curent_cat= $_cat->getCurrentCategory ...
- 【BZOJ1049】【Luogu P2501】 [HAOI2006]数字序列 DP,结论,LIS
很有(\(bu\))质(\(hui\))量(\(xie\))的一个题目. 第一问:求最少改变几个数能把一个随机序列变成单调上升序列. \(Solution:\)似乎是一个结论?如果两个数\(A_i\) ...
- 我说CMMI之四:CMMI的表示方法--转载
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/dylanren/article/deta ...
- 线程异步更新UI
winform程序一般是不允许非主线程操作ui,单可以通过线程与委托的方式并结合Control类提供的BeginInvoke机制进行ui更改 如下,这是更新ui的方法 private void upU ...
- 网页制作怎么加MP4,用HTML代码
<video src="movie.mp4" controls="controls"> 您的浏览器不支持 video 标签. </video& ...
- jquery input选择器 语法
jquery input选择器 语法 作用::input 选择器选取表单元素.该选择器同样适用于 <button> 元素.大理石平台价格表 语法:$(":input") ...