V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kikione
V2EX  ›  程序员

分布式没有全局时间

  •  
  •   kikione · 2021-11-21 15:37:58 +08:00 · 3842 次点击
    这是一个创建于 1124 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不同计算机上的时钟未必会给出相同的时间?
    为什么会这样啊?
    25 条回复    2021-11-23 02:05:55 +08:00
    geligaoli
        1
    geligaoli  
       2021-11-21 17:55:00 +08:00
    如果系统允许几个毫秒的误差,用 ntpdate 就可以了。要是想达到微妙的误差,就得靠硬件了。
    cmdOptionKana
        2
    cmdOptionKana  
       2021-11-21 18:44:53 +08:00   ❤️ 4
    因为根据相对论,每个参照系的时间都不同,而不同计算机就是不同参照系,自然不可能拥有相同的时间。
    qaqLjj
        3
    qaqLjj  
       2021-11-21 20:12:20 +08:00
    所有的度量衡都有最小误差啊,时间也一样,只要控制在一定范围内不就没问题吗
    rrfeng
        4
    rrfeng  
       2021-11-21 21:42:07 +08:00
    不同计算机上的时钟必然会给出不同的时间。
    ipwx
        5
    ipwx  
       2021-11-21 22:03:25 +08:00
    因为晶振是有误差的。

    除非你用原子振荡计时。
    luoqeng
        6
    luoqeng  
       2021-11-21 22:23:22 +08:00
    只有逻辑时钟 Lamport
    luoqeng
        7
    luoqeng  
       2021-11-21 22:24:33 +08:00
    Google 的分布式数据库库用原子时钟保证误差
    luoqeng
        8
    luoqeng  
       2021-11-21 22:30:25 +08:00
    sagaxu
        9
    sagaxu  
       2021-11-21 23:01:04 +08:00
    同一台机器上,时间没有误差吗?
    GeekGao
        10
    GeekGao  
       2021-11-21 23:07:44 +08:00
    原子钟的标准时间是个参考系,同步到其他设备上碍于物理距离 / 时间发生器(例如晶振)工艺,无法保持绝对意义上的同步。
    所以分布式系统为了保持同步动作,就需要额外的考量,增加其他的处理逻辑了
    MoYi123
        11
    MoYi123  
       2021-11-21 23:08:50 +08:00
    这就是 CAP 理论中的 AP 系统.
    hallDrawnel
        12
    hallDrawnel  
       2021-11-21 23:26:59 +08:00
    计算机自己的晶振时钟偏差其实可以很大,为了尽可能做到精确,IDC 可以部署原子钟同步时间,做到尽可能的一致。
    whevether
        13
    whevether  
       2021-11-21 23:52:52 +08:00
    最好的方法就是统一使用网关上的时间
    sutra
        14
    sutra  
       2021-11-22 00:36:54 +08:00
    chinvo
        15
    chinvo  
       2021-11-22 00:41:02 +08:00
    可以考虑用 PTP
    Buges
        16
    Buges  
       2021-11-22 01:58:59 +08:00 via Android
    就算是单机,要保证 monotonic time 也不是一件容易的事情。
    pythonee
        17
    pythonee  
       2021-11-22 09:17:01 +08:00
    @whevether 那网关就是单点了
    pythonee
        18
    pythonee  
       2021-11-22 09:17:33 +08:00
    我在想另外一个问题,分布式系统可不可以做到不依赖时间呀
    CRVV
        19
    CRVV  
       2021-11-22 09:54:13 +08:00
    分布式可以有全局时间,比如 GPS 。从卫星发射它自己的时间,然后在地面接收到不同卫星发射的不同时间,用时间差可以算出来距离差,然后解出自己的坐标。
    整套系统的关键就是那个全局一致的时间。
    当然成本比较高,别的系统值不值得用就是另一回事了。
    luoqeng
        20
    luoqeng  
       2021-11-22 09:55:44 +08:00
    @pythonee 分布式系统需要依赖的不是时间,是确认两台机器处理事情的先后顺序,顺序有全序 偏序关系。
    whevether
        21
    whevether  
       2021-11-22 10:16:35 +08:00
    @pythonee 网关怎么是单点了。你玩过没? 你分布式有一个对外的通道。这个对外的闸门就是网关
    liuhan907
        22
    liuhan907  
       2021-11-22 10:41:43 +08:00 via Android
    @whevether 网关不是单点那还不是回到这个问题上来了
    2i2Re2PLMaDnghL
        23
    2i2Re2PLMaDnghL  
       2021-11-22 12:30:35 +08:00
    不可能存在完美的计时工具,因为时计即熵计。理论上完美的时计需要消耗全部的能量转化成等量的纯熵
    PDdavon
        24
    PDdavon  
       2021-11-22 20:32:10 +08:00
    每台计算机只能根据晶振来确定从开机后到当前的时间,但是晶振本身也是受到温度影响的。而又由于网络延迟的不确定性,也不能完全相信其他节点传递过来的时间,只能是从几个信息源综合判定当前可能的时间。可以看下《数据密集型应用设计》 http://ddia.vonng.com/#/ch8?id=%e4%b8%8d%e5%8f%af%e9%9d%a0%e7%9a%84%e6%97%b6%e9%92%9f
    zeni123
        25
    zeni123  
       2021-11-23 02:05:55 +08:00 via iPhone
    可以有的

    假如是全球规模的分布式系统 使用原子钟 gps 这样的全局时间来同步比网络通信更好

    https://en.m.wikipedia.org/wiki/Spanner_(database)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3359 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:54 · PVG 19:54 · LAX 03:54 · JFK 06:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.