分布式系统(二)

本文探讨了时钟在信息技术中的关键作用,包括同步需求、时钟偏移与漂移、同步方法(如Cristian算法、Berkeley方法和NTP)、网络时间协议的应用,以及逻辑时间戳与向量时钟在无同步时钟环境下的解决方案。
摘要由CSDN通过智能技术生成

时间和时钟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.向量时间戳

需要的信息很大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值