分布式系统阅读笔记(二十二)-----时钟和时钟同步

时钟的基本概念

时钟

时钟在一般意义上指的是一个计算机的物理时间,每个计算机都会包括他们自己的物理时钟,不同的计算机的物理可能会不同。

时钟漂移

经过在同个地方的计算机,他们的物理也有可能会不一样,如果他们从刚刚开始相同的时间计时开始,过了1过月,1年也可能会有快又慢,这在专业名词上讲叫做时间漂移。本质的原因是每秒的时间偏移,经过日记月累之后,就会有可能达到1秒钟的差距,解决的办法很简单,就是过一段时间之后,将时间纠正回来就可以了。

UTC

UTC全称是Coordinated Universal Time,协调世界时,又称世界统一时间,用来进行高进度时间的同步。协调世界时以原子时秒长为基础,在此时刻上尽量接近于世界时的一种时间计量系统。

同步物理时间

同步物理时间的主要手段分为2个External synchronization,靠的是UTC协调世界时,给定一个边界值D>0, 满足条件|S(t)-Ci(t)|<D,另外1个是Internal synchronization,同样给定时间边界D,相互之间进行同步,|Ci(t)-Cj(t)|<D。

同步系统中的时间同步

我们首先在一般情况下进行考虑,比如2个进程,相互之间只允许进行消息传递来进行通信,如何进行事件同步,假设传输的时间为T(trans),假设发送进程P1发送的时间为t,则P2的时间应该设置成t+T(trans),这个很好理解,基于这个思路继续,发送的传输时间一般不可能是固定的,可能受网络环境的影响或快或慢,所以定义了传输的时间上界u(max),下界u(min),则此时的抵达时间应该设置成t+(max+min)/2,

Cristian时钟同步方法

Cristian的方法利用了时间服务器,连接上设备并且能够接受从UTC资源发来的信号进行同步,以UTC的时间作为同步的时间。定义一个进程p,一个TimeServer s,请求消息为M(r),接收消息M(r),M(r)中包含了从时间服务器中获取的最新的时间,进程p记录了收发的总延时T(round),则进程p接收到消息后,他的时间应该是p(t)=M(r)中的时间t+T(round)/2。方法大体的思路就是如此,重新体会一下这个方法有什么弊端,明显的一点是单点瓶颈问题,因为服务器是单一服务器,随时都可能挂,所以我们可以联想到的解决办法是提供服务器集群组的方式处理,这时单点问题解决了,但是万一有些进程故意发错的时间给接收进程呢,如何处理,这是一个典型的拜占庭将军问题了,这个暂时不讨论,下面的算法可以帮我们解决这个问题。

The Berkeley Algorithm

这个算法用的是Internal synchronization的方法,给定一组计算机,选出一个作为Coordinator,作为master,这个master选择机器中将要被同步的机器,叫做slave,通过计算与这些机器之间进行时间交换,平均快的和慢的时间,最终达到时间一致性,在比较的过程中,就可以排除明显偏差大的时间了。

The Network Time Protocol

Cristian和Berkeley算法都是偏向于用于小规模的内网中,而Network Time Protocol则是一种在因特网上的分布式时间服务。他定义了Time Service的结构。NTP有下面几个特点。

1、NTP提供了一个客户端可以从网络中精准同步UTC时间的客户端。

2、服务端通过接口的形式方便客户端的调用。

3、NTP服务器与服务器之间的时间同步是以层级控制的方式构成。1级节点同步2个2级节点,2(1)可能又同步2个3级节点,2(2)也可能2个3级节点。其中的时间交互协议通过信息之间的交换。

逻辑时间和时钟

逻辑时间,从字面上理解当然不同于物理时间,在分布式系统中,运用逻辑时间的例子也不少,假设L(i)表示的是消息事件的发生事件,当p1进程接收到的时候,就需要对时间做递增操作,L(i) = L(i) + 1,逻辑意义上的时间增加。

全局有序逻辑时间--Vector Clock

Vector Clock是向量时钟,可以可以保证全局有序的逻辑时间,通过V<t1, t2, t3....>ti保存了Pi进程的当前进行到的时间,当进程Pi接收到相应的消息事件时,则在对应的位置上ti上进行ti = ti + 1的操作,当做Vector Clock向量比较的时候,需要对V每个位置上进行比较,如果V1中的ti全部小于V2中的ti时,才算事件1早于事件2发生。

参考文献:<<Distributed
Sysytems Concepts And Design>>原版第五版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon Blair

时间: 2024-11-07 09:40:46

分布式系统阅读笔记(二十二)-----时钟和时钟同步的相关文章

分布式系统阅读笔记(十二)-----分布式文件系统

一.介绍 一个分布式系统本质上就是一段程序能够存储和访问远程文件就像访问本地文件类似,能够允许任何连上网络上的用户都可以访问.在后面的记录中,主要是对2大文件系统NFS和AFS做详细的介绍和分析. 1.文件系统在最初的设计时往往是按照中心结点服务的方式构建,在中心节点服务器中保持着大量的文件资源. 2.对于文件系统的分块有下面的分法:1.目录模块.2.文件模块.3.访问控制模块.4.文件访问模块.5.Block文件块模块.6.设备模块,主要指的是磁盘IO,和缓存. 3.文件系统的作用主要有:组织

分布式系统阅读笔记(十四)-----时钟和全局状态

介绍 在分布式系统中,时间是一个巨大的问题,因为在不同的电脑上会有他们自己的物理时间,如何做到状态事务的一致性往往比较难.缺少一个全局的物理时间使得很难去发现一段分布式程序的执行的状态是如何. 时钟,事件,进程状态和时间同步算法 小标题中提到的3个 名次在分布式的时间中出现最多频率的词.如何同步不同机器上的物理时间呢,下面简单的列举几个算法 1.一个叫Cristian方法同步物理时间的办法,这个方法会用到一个额外的时间服务器,但是这里会有个问题,如果这个服务挂了,岂不是同步失效了,不过你可以构建

Yii源码阅读笔记(十二)

Action类,控制器中方法的基类: 1 namespace yii\base; 2 3 use Yii; 4 5 /** 6 * Action is the base class for all controller action classes. 7 * Action是所有控制器方法的基类 8 * Action provides a way to reuse action method code. An action method in an Action 9 * class can be

分布式系统阅读笔记(十)-----P2P对等网络系统

一.介绍 P2P系统全称是peer-To-peer System,就是对等系统的意思.他的出现使得资源可以在所有的节点间进行数据的共享了,前提是只要他是连上网络的.在P2P系统中,所有的资源和数据对象都分布于各个节点中. 1.P2P系统可以用在一些分布式的应用和服务当中. 2.在P2P中一个好的资源存放算法就显得非常重要. 3.正是因为上面的第2条原因,出现了P2P的中间件,目的就是为了location定位资源对象或者是副本容错的处理,每个资源以GUID的形式来区别标识别. 二.例子:Napst

分布式系统阅读笔记(十五)-----协调和一致性

介绍 这里说的协调和一致性指的是在分布式系统的环境下,对于多进程访问共享资源的一个协调和数据状态的一致性的保证.其中的措施包括分布式的共有排除机理,在组通信中的协调和一致性的手段,还有这其中可能会出现的一些问题.在整个协调服务的过程中,有一个东西非常重要,就是失败的监听,这里需要一个失败监听器.可以用一个进程作为失败监听进程,都其他的进行进行监听,方式可以通过类似心跳机制,发送消息证明自己目前是活着的状态. 分布式的共有排除 这个指的是一堆的进程共同的访问共享的一堆资源的情况,通过分布式的共有的

分布式系统阅读笔记(十六)-----事务和并发控制

介绍 在分布式系统中,事务的运用和共享资源的并发控制是非常常见的.简单的说,事务就是一些原子的操作的集合.原子操作的意思就是要么操作成功要么操作失败,没有其他的选择.并发控制是出现在高并发场景的时候,本篇主要描述3种常见的手段,1.锁的措施.2.乐观并发控制手段.3.时间戳序列方式.在此之前,先回顾一下平时在写程序的时候,常见的用于同步的手段,比如说: 1.用synchronize关键字,这个字java里用的,保证只有一个线程能执行里面的方法. 2.wait()和notify()方法用以协调同步

42. 蛤蟆的数据结构笔记之四十二图的遍历之广度优先

42. 蛤蟆的数据结构笔记之四十二图的遍历之广度优先 本篇名言:"生活真象这杯浓酒 ,不经三番五次的提炼呵 , 就不会这样一来可口 ! -- 郭小川" 继续看下广度优先的遍历,上篇我们看了深度遍历是每次一个节点的链表是走到底的. 欢迎转载,转载请标明出处:http://write.blog.csdn.net/postedit/47029275 1.  原理 首先,从图的某个顶点v0出发,访问了v0之后,依次访问与v0相邻的未被访问的顶点,然后分别从这些顶点出发,广度优先遍历,直至所有的

《Programming in Lua 3》读书笔记(二十二)

日期:2014.8.6 PartⅣ The C API 26 Extending Your Application 使用Lua很重要的一点是用来做配置语言.配合主语言做一些功能的配置. 26.1 The Basics 有的时候程序需要配置一些功能信息,很多时候可能有许多别的方法比用lua做配置要更简单:如使用环境变量或者读取文件,读取文件涉及到文件的解析.如果使用Lua进行配置的话,相当于用lua文件替代了要读取的如csv.txt文件等. 使用Lua进行配置的时候,就需要使用Lua API去控制

SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面

SaltStack 有自身的用python开发的web界面halite,好处是基于python,可以跟salt的api无缝配合,确定就比较明显,需要个性化对web界面进行定制的会比较麻烦,如果喜欢体验该界面的可以参考下面的文章  http://rfyiamcool.blog.51cto.com/1030776/1275443/ 我是运用另一个python+php来进行web开发,具体需要的工具有在我的另一篇文章里面介绍过,这里再重新进行整个开发介绍 首先介绍php 跟python通信的工具 pp

一个怂女婿的成长笔记【十二】

2013-05-27 年轻时有梦想,等我们老了,才有回忆. 最近一直在聊一些和"努力工作"完全对立的东西,上周末回了老婆娘家,又和岳父聊了一下以后的打算.虽然岳父是一个生意人,但是当我在提到不要把大心思花在正职工作上的时候,他虽然同意人要多为自己留点后路的观点,但是他说在正职工作上应该为老板创造多于自己薪水的价值,比如老板给你5000块,你起码要做到7000块的水平.虽然我不愿意做到这样,但是这本来就是一个互相利用的关系,你有被老板利用的价值,才能保证在你想出来单干之前不丢饭碗. 怂女