zoukankan      html  css  js  c++  java
  • 分布式系统阅读笔记(二十二)-----时钟和时钟同步

    时钟的基本概念

    时钟

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

    时钟漂移

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

    UTC

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

    同步物理时间

    同步物理时间的主要手段分为2External 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

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

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

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

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

    逻辑时间和时钟

    逻辑时间,从字面上理解当然不同于物理时间,在分布式系统中,运用逻辑时间的例子也不少,假设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

  • 相关阅读:
    Sqlsugar中使用Codefrist创建数据库
    EFCore中CoreFrist多个上下文
    高并发
    优先级反转
    二叉树算法
    使用AJAX上传图片
    Entity Framework
    .Net面试题
    LC 1515. Best Position for a Service Centre (Simulated Annealing)
    git
  • 原文地址:https://www.cnblogs.com/bianqi/p/12184012.html
Copyright © 2011-2022 走看看