分布式没有全局时间

2021-11-21 15:37:58 +08:00
 kikione
不同计算机上的时钟未必会给出相同的时间?
为什么会这样啊?
3608 次点击
所在节点    程序员
25 条回复
geligaoli
2021-11-21 17:55:00 +08:00
如果系统允许几个毫秒的误差,用 ntpdate 就可以了。要是想达到微妙的误差,就得靠硬件了。
cmdOptionKana
2021-11-21 18:44:53 +08:00
因为根据相对论,每个参照系的时间都不同,而不同计算机就是不同参照系,自然不可能拥有相同的时间。
qaqLjj
2021-11-21 20:12:20 +08:00
所有的度量衡都有最小误差啊,时间也一样,只要控制在一定范围内不就没问题吗
rrfeng
2021-11-21 21:42:07 +08:00
不同计算机上的时钟必然会给出不同的时间。
ipwx
2021-11-21 22:03:25 +08:00
因为晶振是有误差的。

除非你用原子振荡计时。
luoqeng
2021-11-21 22:23:22 +08:00
只有逻辑时钟 Lamport
luoqeng
2021-11-21 22:24:33 +08:00
Google 的分布式数据库库用原子时钟保证误差
luoqeng
2021-11-21 22:30:25 +08:00
sagaxu
2021-11-21 23:01:04 +08:00
同一台机器上,时间没有误差吗?
GeekGao
2021-11-21 23:07:44 +08:00
原子钟的标准时间是个参考系,同步到其他设备上碍于物理距离 / 时间发生器(例如晶振)工艺,无法保持绝对意义上的同步。
所以分布式系统为了保持同步动作,就需要额外的考量,增加其他的处理逻辑了
MoYi123
2021-11-21 23:08:50 +08:00
这就是 CAP 理论中的 AP 系统.
hallDrawnel
2021-11-21 23:26:59 +08:00
计算机自己的晶振时钟偏差其实可以很大,为了尽可能做到精确,IDC 可以部署原子钟同步时间,做到尽可能的一致。
whevether
2021-11-21 23:52:52 +08:00
最好的方法就是统一使用网关上的时间
sutra
2021-11-22 00:36:54 +08:00
chinvo
2021-11-22 00:41:02 +08:00
可以考虑用 PTP
Buges
2021-11-22 01:58:59 +08:00
就算是单机,要保证 monotonic time 也不是一件容易的事情。
pythonee
2021-11-22 09:17:01 +08:00
@whevether 那网关就是单点了
pythonee
2021-11-22 09:17:33 +08:00
我在想另外一个问题,分布式系统可不可以做到不依赖时间呀
CRVV
2021-11-22 09:54:13 +08:00
分布式可以有全局时间,比如 GPS 。从卫星发射它自己的时间,然后在地面接收到不同卫星发射的不同时间,用时间差可以算出来距离差,然后解出自己的坐标。
整套系统的关键就是那个全局一致的时间。
当然成本比较高,别的系统值不值得用就是另一回事了。
luoqeng
2021-11-22 09:55:44 +08:00
@pythonee 分布式系统需要依赖的不是时间,是确认两台机器处理事情的先后顺序,顺序有全序 偏序关系。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/816940

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX