不好意思,刚才在 web 上写的时候,敲到一半,一个回车就将草稿发出去了。
本来不想打脸楼主的,楼主非要装逼。
正好国庆有点时间,回复一下。
看代码,其中计算并且输出的结果:
io.WriteString(os.Stdout,
fmt.Sprintf("%s,%s\n", fmt.Sprintf(t.formater, i+1),
ao.ClockOffset.Truncate(nist.ClockOffset).String()))
楼主告诉我,这端逻辑是什么?
我看了一下
github.com/beevik/ntp,其中 ClockOffset 的定义:
// ClockOffset is the estimated offset of the client clock relative to
// the server. Add this to the client's system clock time to obtain a
// more accurate time.
ClockOffset time.Duration
func offset(org, rec, xmt, dst ntpTime) time.Duration {
// local clock offset
// offset = ((rec-org) + (xmt-dst)) / 2
a := rec.Time().Sub(org.Time())
b := xmt.Time().Sub(dst.Time())
return (a + b) / time.Duration(2)
}
这个 ClockOffset 就是 楼主测试的机器,和 ntp 服务器之间的偏差。
那么下面的语句怎么能够计算阿里云 ntp 所谓“精读”,“时钟误差”?
ao.ClockOffset.Truncate(nist.ClockOffset).String())
这里的 Truncate 是 time.Duration 定义的,是最近 golang 才新引入的功能:
func (Duration) Truncate
func (d Duration) Truncate(m Duration) Duration
Truncate returns the result of rounding d toward zero to a multiple of m. If m <= 0, Truncate returns d unchanged.
也就是进行类似 Round 取整的一个方法。
除了代码混乱,再看看楼主文字的装逼:
"因为楼主自己有写了 ntp 服务,顺带跑 ntp 集群",楼主告诉我,你写了什么 ntp 服务?
ntp 服务传统的有 ntp server,新的有 chrony 等,
看楼主对 ntp 协议的理解和小学生一样的代码功力,楼主的 ntp 服务是什么鬼东东?
什么叫 “ ntp 集群”?不是堆砌一些所谓“集群”就显得高大上的,只会说明你不懂,弄一些名字装逼。
"但其他节点都在 10ms 以下的精度了,所以就怀疑到了 aliyun 本身的时钟误差,然后发现果然慢了 20ms 左右”
楼主告诉我,什么叫“精度”? 10ms 是怎么测量的?什么是“时钟误差”?怎么测量的?