【问题标题】:How do I test my implementation of time syncing algorithm between systems?如何测试系统之间时间同步算法的实现?
【发布时间】:2014-03-17 19:38:53
【问题描述】:

我通过计算与主服务器的偏移量实现了一个简单的时间同步算法。处理代码本身存在一些滞后,这将加起来为时间戳。所以我想知道我将如何测试我的算法实际上是否在系统之间同步时间戳?

以下是我在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() );
  };

系统使用 socket.io 进行通信。我在服务器中使用了一个全局变量,即 global,它在每次收到请求时都会更新,并且 global 值作为 data.ord 发送到客户端。

所以目前,我有一个主服务器和多个从服务器,它们一直在汇集时间戳。以下是我得到的输出:

主节点:

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

如你所见

偏移量 + 时间戳(主)> 时间戳(从)

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

【问题讨论】:

    标签: node.js algorithm timestamp distributed-computing clock-synchronization


    【解决方案1】:

    你不可能比让你的主机与http://en.wikipedia.org/wiki/Network_Time_Protocol同步更好。可以说服 Linux 和 Windows 与 NTP 同步,并在必要时充当 NTP 服务器(在 Windows AD 上,一个 DC 是一个稍微奇怪的配置 NTP 服务器,以便使其他机器足够接近以进行 Kerberos 身份验证工作)。

    典型的计算机时钟不是很准确。如果您在一个周末比较开启同步和关闭同步的系统,您会发现关闭同步时会有明显的漂移,但开启同步时希望很少或没有。您还可以启动机器明显不同步,并查看它们需要多长时间才能同步。默认情况下,NTP 不会同步超过一小时的时间。我发现这很烦人,因为我们在 VMWare 设置方面遇到了问题,导致机器漂移了几个小时,有时我们的机器在 1970 年出现,但我准备相信有充分的理由不同步极端差异,所以我不会旨在解决超过一小时的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-21
      • 2017-11-30
      • 2015-07-30
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多