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

时间,时钟,分布式系统中的事件顺序

https://www.cnblogs.com/hzmark/p/Time_Clocks_Ordering.html
https://zhuanlan.zhihu.com/p/401173606
https://zhuanlan.zhihu.com/p/34057588
https://zhuanlan.zhihu.com/p/27503041
        首先提出happen-before的概念,用来定义分布式系统中的偏序,再给出一套分布式算法同步逻辑时钟以构建全序。全序可以解决同步问题,同步物理时钟和限定物理时钟的误差。
        时间这一概念源自于事件的更替(事件发生顺序)。如果与单个进程中事件发生的间隔时间相比,消息传输延迟不可忽略,则系统是分布式的。单机多处理系统所设计的问题和分布式系统的问题类似,因为某些事件的发生顺序不可预测。分布式系统中事件顺序很难确定,提出偏序概念,事件部分排序。

偏序

        物理时钟不准确,定义偏序happen-before,定义事件,并用消息的发送和接受来定义事件的先后。
        我们假设a→a是不成立的(一个事件发生于自己之前显得没有什么意义),那么→是不具备自反性的偏序关系。

逻辑时钟

        构建不依赖物理时间,依据事件顺序来构建逻辑时钟,可以采用计数器的实现方式。if a → b then C<a> < C<b>,需要注意的是我们不能期望这个条件的逆命题成立。Ci的值在发生事件时会改变,Ci的改变本身不包含事件。
        如果满足一下两个条件,那么久满足Clock Condition:

  1. 如果a、b是同一个进程中的事件,且a发生在b之前,那么C<a> < C<b>
  2. 如果a、b是不同进程中的事件,且a是发送一条消息的事件,而b是接收这条消息的事件,那么C<a> < C<b>

        为了满足Clock Condition,我们需要确保满足C1、C2条件:

  1. IR1:任何一个进程Pi在两个成功事件之间递增Ci
  2. 为了满足C2,我们需要每条消息m包含一个时间戳Tm,Tm表示消息被发送的时间。收到该消息的进程需要将时钟调整到大于Tm。更准确的,需要满足一下规则:
    IR2:(a)如果事件a表示Pi进程发送消息m,那么m包含一个时间戳Tm,Tm=Ci<a>。(b)进程Pj收到消息m,Pj需要将Cj设置为等于或大于当前值,且大于Tm的值。

全部事件排序

        分布式互斥算法,需要所有进程的积极参与,一个进程必须知道其他进程发出的所有命令,因此单个进程的失败将使得其他进程无法执行状态机命令。我们将观察到,整个失败的概念仅在物理时间的背景下才有意义。如果没有物理时间,就无法将失败的过程与仅在事件之间暂停的过程区分开来。用户只能因为等待响应时间过长而判断系统“崩溃”。

异常行为

        当存在与本事件相关的外部事件,算法失效。两种解决方案:

  1. 将系统中必要的有关排序的信息引入系统,A打电话时候将自己的时间戳带过去
  2. 构建一个满足以下条件的时钟系统,更强的时钟条件
    如果a->b,那么C<a> < C<b>,使用物理时钟来避免异常行为

物理时钟

        

总结

        happen-before定义偏序关系,将偏序扩展为全序的算法,展示算法在分布式互斥的应用。
        该算法定义的全序关系有些随意。当系统与用户观察到的顺序不一致时会产生异常行为。该问题可以通过使用一个被正确同步的物理时钟系统来避免。我们的定理还展示了时钟可以被同步到怎样的程度。在分布式系统中,认识到事件的发生顺序是只是一个偏序关系是非常重要的。我们认为这个观点对理解所有多进程的系统非常有帮助。它可以帮助人们理解多进程系统中的基本问题,撇开那些用于解决这些问题的各种机制。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值