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 ...
随机推荐
- python进阶资源
本文为不同阶段的Python学习者从不同角度量身定制了49个学习资源. 初学者 Welcome to Python.org https://www.python.org/ 官方Python站点提供了一 ...
- golang常见的几种并发模型框架
原文链接 package main import ( "fmt" "math/rand" "os" "runtime" ...
- java网络编程+通讯协议的理解
参考: http://blog.csdn.net/sunyc1990/article/details/50773014 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很 ...
- subversion(SVN)服务配置及使用方法
1.安装 yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql -y 2.查看版本 svnserve --vers ...
- Windows下nginx的启动,重启,关闭功能
@echo off rem 提供Windows下nginx的启动,重启,关闭功能 echo ==================begin======================== cls :: ...
- HackIM web关writeup
Web100 访问页面将看到下面的错误 在burp里使用request / response查看有没有什么不正常的地方.如下图所示,在返回的数据包里被设置了两次不同的PHPSESSID. 如果我把PH ...
- linux版宝塔安装Redis
1安装服务 2配置设置 3安装PHP扩展 首先,我们来安装服务,进入管理面板--软件管理--运行环境--redis-点击安装,等待完成 完成之后开始第二步,配置设置.这一步根据自己需要进行配置.注意安 ...
- 百度网盘,FTP上传异常、上传失败的解决办法
若你的宽带上传上限速度为50KB,那么将百度网盘或FTP的上行速度调为50KB以下即可,就不会出现网络异常的情况了.
- Python核心技术与实战——二十|assert的合理利用
我们平时在看代码的时候,或多或少会看到过assert的存在,并且在有些code review也可以通过增加assert来使代码更加健壮.但是即便如此,assert还是很容易被人忽略,可是这个很不起眼的 ...
- nginx防止跳转到内网解决
proxy_redirect http://test.abc.com:9080/ /;