time - 两台远程计算机之间的(时钟)同步

标签 time synchronization clock

我正在考虑在我的应用程序中编写一个简单的同步功能,出现的问题之一是两台远程计算机之间的时间同步,每台计算机都有自己的时钟(特别是关于文件/对象的修改日期) )。

我确信已经对这个主题进行了大量研究,并且不想过于理论化,但我想知道是否有任何公认的最佳实践来最小化远程时钟之间的时间差异?

例如,一开始是始终使用通用时间 (UTC),因为这样可以避免时区问题,但不能保证两台计算机具有完全相同的系统时间。幸运的是,我正在做的工作不是很细粒度,所以这不是一个非常重要的问题,但我仍然很好奇。

一种解决方案是始终在两端使用相同的时钟,例如全局时间服务器,而不是本地系统时钟。据推测,这(与共享资源锁结合)可以保证同步时间不会意外重叠,但不太实用。

我突然想到的一个想法是将每个节点(每个客户端)与之前某个时刻计算的偏移量同步,也许通过计算系统时钟与全局时间服务器的偏移量来实现。这只是偶尔需要执行的操作,因为偏移量本身在短时间内不太可能发生很大变化。

更新:让我补充一点,我对实际同步两台计算机的系统时钟不感兴趣——我假设操作系统在大多数情况下会处理这个问题。这只是一个如何确保应用程序的两个实例使用同步时间的问题,尽管在当今时代,我认为系统时钟几乎肯定会同步到一些非常小的增量内。

最佳答案

像其他人所建议的那样,在您的应用程序中依赖 NTP 是很简单的做法。正确的做法是使用Lamport的分布式时钟同步算法。他在 1978 年发表的经典论文 Time, clocks, and the ordering of events in a distributed system 中对此进行了解释。 .

关于time - 两台远程计算机之间的(时钟)同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51602408/

相关文章:

c# - 如何使用 C#/Mono 设置 Linux/Mac 计算机时钟?

c - 在特定时间后执行代码

parsing - 使用 sub 方法进行日期解析

android模拟器时间同步

javascript - JavaScript 中的 Facebook 服务器时间

clock() 在某些平台上不工作

MySQL 查询需要时间来执行

php - 如何根据需要将秒数转换为具有更大单位的纯英文字符串?

java - 同步访问方法时是否需要集契约(Contract)步(通过 Collections.synchronizedX)?

java - 有什么方法可以在java中锁定(同步)二维数组中的一行?