我正在考虑在我的应用程序中编写一个简单的同步功能,其中一个问题是两个远程计算机之间的时间同步,每个计算机都有自己的时钟(特别是关于文件/对象的修改日期).
我确信已就这一主题进行了大量研究,并且不想过于理论化,但我想知道是否有任何可接受的最佳实践可以最大限度地减少远程时钟之间的时间差异?
例如,一个开始是始终使用通用时间(UTC),因为这可以避免时区问题,但不能保证两台计算机将具有完全相同的系统时间.幸运的是,我正在做的工作并不是非常精细,所以它并不是一个非常重要的问题,但我仍然很好奇.
一种解决方案是始终在两端使用相同的时钟,例如全局时间服务器,而不是本地系统时钟.据推测,这(与共享资源锁相结合)可以保证同步时间不会意外重叠,但这不是很实用.
有人认为只是突然出现在每个节点(每个客户端)与先前某点计算的偏移同步,可能是通过计算系统时钟与全球时间服务器的偏移量.这只需要偶尔进行,因为偏移本身不会在短时间内发生很大变化.
更新:我只想补充一点,我对实际同步两台计算机的系统时钟并不感兴趣 - 我认为操作系统在大多数情况下都会处理这个问题.这只是一个如何确保应用程序的两个实例使用同步时间的问题,尽管在这个时代,我认为系统时钟几乎肯定会在一些非常小的delta内同步.
正如其他人所推荐的那样,依靠NTP为您的应用程序提供了简单的软糖.正确的方法是使用Lamport的分布式时钟同步算法.它在他的经典1978年论文时间,时钟和分布式系统中事件的排序中得到了解释.
查看" 网络时间协议 "(NTP)规范.
您可以尝试PTP,精确时间协议(PTP)是一种用于在整个计算机网络中同步时钟的协议.在局域网上,它可以在亚微秒范围内实现时钟精度,使其适用于测量和控制系统. http://en.wikipedia.org/wiki/Precision_Time_Protocol