如何测试系统间时间同步算法的实现?



我通过计算来自主服务器的偏移量实现了一个简单的时间同步算法。处理代码本身会有一些延迟,这将增加时间戳。所以我想知道我将如何测试我的算法实际上是同步系统之间的时间戳或不?

下面是我在nodejs中时间同步的逻辑

var onSync = function (data) {
    var diff = Date.now() - data.t1 + ((Date.now() - data.t0)/2);
    offsets.unshift(diff);
    if (offsets.length > 10)
      offsets.pop();
    console.log("Order no ",data.ord,"The offset is ",offsets[0] ,"time in server was = ",data.t1 , "time in the slave = ", Date.now() );
  };

系统使用套接字通信。io。我已经使用了一个全局变量,即全局在服务器得到更新,每次它得到请求和全局值作为数据发送。到客户端。

所以目前,我有一个主服务器和多个从服务器,它们保持时间戳池。下面是我得到的输出:

主节点:

rahul@g3ck0:~/programs/dos_homework/hw2$ nodejs ob1.js 
Current server timestamp is  1395043602717 order no is  1
Current server timestamp is  1395043603263 order no is  2
Current server timestamp is  1395043603717 order no is  3
Current server timestamp is  1395043604264 order no is  4
Current server timestamp is  1395043604719 order no is  5
Current server timestamp is  1395043605265 order no is  6
Current server timestamp is  1395043605720 order no is  7
Current server timestamp is  1395043606267 order no is  8
奴隶1:

rahul@g3ck0:~/programs/dos_homework/hw2$ nodejs slave1.js
Order no  1 The offset is  2.5 time in server was =  1395043602718 time in the slave =  1395043602719
Order no  3 The offset is  2 time in server was =  1395043603717 time in the slave =  1395043603718
Order no  5 The offset is  1.5 time in server was =  1395043604719 time in the slave =  1395043604720
Order no  7 The offset is  0 time in server was =  1395043605720 time in the slave =  1395043605720
奴隶2:

rahul@g3ck0:~/programs/dos_homework/hw2$ nodejs slave2.js 
Order no  2 The offset is  6 time in server was =  1395043603263 time in the slave =  1395043603268
Order no  4 The offset is  2.5 time in server was =  1395043604264 time in the slave =  1395043604265
Order no  6 The offset is  2 time in server was =  1395043605265 time in the slave =  1395043605266
Order no  8 The offset is  2 time in server was =  1395043606267 time in the slave =  1395043606268

如你所见

offset + timestamp(master)> timestamp(slave)

但这在一段时间内持续下降。总之,我不确定这是否是正确的做法。我想听听你的意见1. 如何实现更好的算法?2. 我将如何测试它?

最好的办法就是让主机与http://en.wikipedia.org/wiki/Network_Time_Protocol同步。Linux和Windows都可以被说服与NTP同步,并在必要时充当NTP服务器(在Windows AD上,一个DC是一个配置有点奇怪的NTP服务器,以便使其他机器足够接近,以便Kerberos身份验证工作)。

典型的计算机时钟不是很精确。如果你在一个周末比较一个开启和关闭同步的系统,你会发现在关闭同步的情况下有明显的漂移,但希望开启同步的情况很少或没有。您还可以启动明显不同步的机器,看看它们需要多长时间才能同步。默认情况下,NTP不会同步任何超过一小时的内容。我发现这很令人恼火,因为我们的VMWare设置会让机器偏离几个小时,有时我们的机器是1970年的,但我愿意相信不同步极端差异是有充分理由的,所以我不会打算修复超过一个小时的问题。

最新更新