分布式系统(二)

时间和时钟Time and Clock

时钟有什么用处

1.知道发送请求到服务器需要多久
需要客户端和服务端时钟是同步的

2.用时间戳来安排在分布式系统中的事务
需要分布式系统中的时钟是同步的

3.A是什么时候转钱给B
需要准确的时钟,与global authority 同步

时钟偏移(skew)和时钟漂移(drift)

1.时钟偏移是指 两个时钟的读数的瞬间的不同。
2.时钟漂移率 是指由参考时钟度量的每个单位时间内,时钟与参考的偏移量

同步系统对于最大时钟漂移率有个界限

两种同步方式

外部同步

如果需要准确的时间戳。用外部时间源同步进程的时钟Ci。时钟与外部时钟同步到一定精度D。
在这里插入图片描述

内部同步

内部同步是指在分布式系统内,所有时钟同步到一定精度。

内部同步的时钟未必是外部同步的。
但是一个系统外部同步到范围D,那么这个系统在范围2D之内是内部同步的。

同步系统中如何同步

在这里插入图片描述
在这里插入图片描述

1.如果直接让Ts=Tc,相当于我们直接忽略网络延迟。偏移最大为最大的网络延迟
在这里插入图片描述

2.如果我们直接加最大或者最小的网络延迟。偏移最大为max-min
在这里插入图片描述
3.最好办法是折中
在这里插入图片描述

异步系统同步的三种方式

Cristian 方法

在这里插入图片描述

直接用来回的时间除以二来估计单向的时间偏移。
在这里插入图片描述
如何提高精度?
先发送几个空的request,得到若干T round,然后取其中最小的那个(如果T round= 2T)偏移程度直接为0

Berkeley 方法

只用于内部同步。
服务器轮询客户端。客户端把他们的时间返回给服务器。服务器用Cristian的办法得出时间。然后计算包括他自己在内,时钟的平均值。然后发送调整值(offset)给其他客户端,让他们做出调整。

解决了读取错误时钟的问题。主机采用容错平均值,读不到出错的那个。
主机有毛病了,就选个新的主机。
在这里插入图片描述

网络时间协议(Network Time Protocol)

定义了时间服务的体系结构和在互联网上发布时间信息的协议

1.使互联网用户与UTC同步
在这里插入图片描述

如何实现同步

1.组播
组播模式用于高速LAN。准确率低。相当于直接把时间发出去。
2.过程调用模式(procedure-call mode)
类似于Cristian算法。
3,对称模式(symmetric mode)
最高准确性。一对服务器互发消息。
在这里插入图片描述
实际的传输时间和偏移
在这里插入图片描述
估计偏移时间可以简化成
在这里插入图片描述
实际的偏移时间和估计的偏移时间差为
在这里插入图片描述
d为精确度估计
在这里插入图片描述
在这里插入图片描述

总结

同步系统界限

bound=(max-min)/2

异步系统同步有以下几个办法

1.Cristian算法

在这里插入图片描述

2.Berkeley算法
3.网络时间协议

1.组播
2.过程调用模式(procedure-call mode)
3.对称模式(symmetric mode )

逻辑时间与时间戳

在同步系统的情况下,时间可以按着时钟来排序进行。
如果没有同步时钟,该如何排序?

进程(Process)状态(State)事件(Event)

一个系统里有n个进程
进程的状态随时间改变
状态改变由事件决定:
1.本地计算
2.发送信息
3.接受信息

事件排序

在同一个进程中,事件可以根据本地时钟排序。
那么跨进程的事件该怎么安排?

发生在先关系 Happened-before(HB)

因果序,潜在因果序
1.在同一进程中,时间发生的顺序就是观察到的顺序
2.消息在不同进程传递,先是发送再是接收

HB规则
1.同一进程可以直接观察到顺序
在这里插入图片描述2.对于消息,肯定是先发送再接收
在这里插入图片描述

3.传递性
在这里插入图片描述
例子:
在这里插入图片描述

这种情况不能判断在a之前或者之后。a和e是并发concurrent的。
在这里插入图片描述

Lamport 逻辑时钟(logical clock)

进程给事件加上Lamport时间戳。捕获happen-before 关系
算法:
对于每个进程pi
1.初始化本地时钟Li=0
2.在进程发出每个事件之前 Li+1
3.发消息时,要把附加值带着t=Li
4.接收消息时,进程pi Lj=max(Lj,t)
5.接收消息前,Lj=Lj+1

如果事件e’发生在e之后,那么L(e’)肯定大于L(e)
在这里插入图片描述
反推L(e’)>L(e),不能判断哪个在前面
在这里插入图片描述

向量时钟

每个事件都有一个数组。每个进程维护它自己的向量时钟Vi,数组大小取决于有几个进程。
算法操作类似于上面的逻辑时钟。
如何比较向量时钟。
比较数组中的所有元素的大小来得出:
在这里插入图片描述如果不能比较,两个事件就是并发的

时间戳总结

如何跨进程比较时间戳

1.物理时间戳

要求时钟同步

2.lamport时间戳

不能区分因果和并行顺序的事件

3.向量时间戳

需要的信息很大

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值