我正在尝试创建一个分布式应用程序,它要求网络中的所有计算机同时执行一个事件。你知道吗
假设我们有两个长度相等的数组。你知道吗
labels[] = ["label1", "label2", "label3", ...]
duration[] = [0.5, 1.2, 0.1, 0.1, 3.0, ...]
我在一个局域网里有一个主机和N个奴隶。假设数组已经被复制到所有的从机。我现在要做的是,在所有代码上运行以下代码。你知道吗
for i in len(labels):
print labels[i]
sleep(duration[i])
我需要这个代码在客户机上完全相同的时间开始。你知道吗
如何在所有客户端同时触发“execute”事件?假设所有客户机都使用相同的NTP服务器进行同步,如果我要求他们在预定义的时间开始,那么准确度是否合理?duration[]
数组的时间元素可以小到0.1秒,我想要一个合理的同时性。你知道吗
像其他人写的那样,使用Internet NTP服务器可能会导致太大的延迟。你知道吗
我看到两种选择:
简短的回答-完全同时-是不可能的。正如Russell所写,NTP只在100ms内准确,在局域网上运行可以测量通信延迟,在发送任务时,可以添加超时,即任务应该在何时开始。当您将它发送到
N
节点并且平均延迟为L
毫秒时,第一个节点需要等待(N-1) * L
毫秒才能启动,第二个(N-2) * L
毫秒。。。等等。最后一个会马上开始。你知道吗为了了解同步时钟的问题有多复杂,你可以阅读Google在Spanner: Google's Globally-Distributed Database上的研究论文。他们使用原子钟和GPS时钟在一个数据中心内同步纳秒,在数据中心内同步几毫秒。你知道吗
根据http://en.wikipedia.org/wiki/Network_Time_Protocol,“NTP通常可以在公共互联网上保持时间在几十毫秒以内,并且在理想条件下可以在局域网中实现优于一毫秒的精度。不对称路由和网络拥塞可能导致100毫秒或更大的错误。”
因此,使用公共NTP服务器同步到100ms内是可行的,这可能是使其正常工作的最简单途径。你知道吗
由于您在局域网上,您可以通过让主服务器向下级发送网络消息来获得更好的性能,给出当前时间的概念,或者更简单地说,通过在局域网上运行自己的NTP服务器并将集群指向它。你知道吗
相关问题 更多 >
编程相关推荐