【问题标题】:Why is no global time such a big issue in distibuted systems? When would a global time be useful?为什么在分布式系统中没有全球时间这么大的问题?全球时间什么时候有用?
【发布时间】:2021-09-11 15:32:56
【问题描述】:

我不难理解为什么全球时间不能真正存在或至少不能在分布式系统中测量。但是,我真的不明白为什么这是一个如此大的问题。我的意思是大多数代码无论如何都是按顺序执行的,或者以因果关系执行(所以像 A 这样的东西我们可以在 B 中使用它然后执行 C)。我从未见过像“这很关键,这两个线程同时执行某事”的代码。在什么情况下使用全球时间会有用?

【问题讨论】:

  • 我认为超级用户可能是提出这个问题的合适位置。
  • 您如何建议建立没有时间戳的因果关系?如果分布式系统是一个简单的 FIFO 管道(组件 X 总是第一个接收输入,并且总是只将其转发给组件 Y,然后将其发送给 Z)没有问题,但也没有太多一个分布式系统。一旦组件可以扇出并具有可变的处理时间,就很难以“正确”的顺序处理事物,因此必须使系统变得健壮,这很昂贵。

标签: distributed-computing distributed-system


【解决方案1】:

我的意思是大多数代码都是按顺序执行的

我不同意。对于单个线程上的单个进程,这几乎是正确的。但是,如果泰勒斯威夫特在推特上发布了一张新专辑,并且她的 8870 万粉丝中有 100 万人喜欢它,他们就不必排队等待其他 1-999,999 名用户完成他们的“喜欢”更新。 (或者至少,数据结构比取出重量级锁来保证顺序要快得多。)那里有很多非顺序代码。

或者在因果关系中(所以像 A 这样的东西我们可以在 B 中使用它然后执行 C)。

是的,一个天真的基于时钟的实现并没有实现因果关系。说事件的真正顺序是这样的:

Initially: x = 1
Process 1: set x = 2
Process 2: read x
Process 2: if (x == 2) set x = 4

但我们依赖他们的时钟,它可能看起来像:

Process 1: set x = 2 (t = 4:00:00)
Process 2: read x (t = 3:59:59.000)
Process 2: if (x == 2) set x = 4 (t = 3:50:59.100)

副本可能依赖时间戳来重放这些操作并使用时间戳对它们进行排序。依赖歪斜的时钟会违反因果关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2020-10-02
    • 2012-07-24
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多