簡體   English   中英

如何測試系統之間時間同步算法的實現?

[英]How do I test my implementation of time syncing algorithm between systems?

我已經通過計算與主服務器的偏移量實現了一種簡單的時間同步算法。 在處理代碼本身方面存在一些滯后,這會加總時間戳。 所以我想知道如何測試我的算法是否實際上在系統之間同步時間戳?

以下是我在Node.js中進行時間同步的邏輯

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進行通信。 我已經使用了一個全局變量中獲取每一個它得到請求和全球價值被作為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.我將如何測試?

與讓主機與http://en.wikipedia.org/wiki/Network_Time_Protocol進行同步相比,您做得更好。 可以說服Linux和Windows與NTP同步,並在必要時充當NTP服務器(在Windows AD上,一個DC是配置略有奇怪的NTP服務器,以便使其他計算機保持足夠的距離以進行Kerberos身份驗證,以便工作)。

典型的計算機時鍾不是很准確。 如果您比較一個系統在一個周末的同步打開和關閉狀態,則應該發現在關閉同步的情況下會有明顯的漂移,但希望在同步打開時幾乎沒有漂移。 您還可以使計算機嚴重不同步地啟動,並查看它們需要多長時間才能同步。 默認情況下,NTP不會同步超過1小時的任何內容。 我發現這很煩人,因為我們在VMWare設置上遇到了問題,使機器漂流了幾個小時,有時我們在1970年啟動了機器,但是我准備相信有充分的理由不同步極端差異,所以我不會旨在解決超過一小時的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM