Java是否有现成的时钟同步解决方案?

Uri*_*Uri 8 java distributed real-time clock-synchronization vector-clock

我们有一个大型高性能软件系统,它由多个交互式Java进程(而不是EJB)组成.每个进程可以在同一台机器上,也可以在不同的机器上.

某些事件在一个进程中生成,然后以不同的方式传播到其他进程以进行进一步处理,依此类推.

出于基准测试目的,我们需要创建一个日志,记录每个事件何时通过"检查点",最终将这些日志组合起来,以获得每个事件如何通过系统传播的时间线以及延迟(当然,流程切换和IPC添加延迟,没关系).

当然,问题是时钟同步.所以这是我的问题:

1)如果所有进程都在同一台机器上,是否保证currentTimeMilis在通话时是准确的?ITP的错误是否存在一定的约束?

2)如果某些进程可能在不同的机器上,那么是否存在用于时钟同步的现成解决方案(也是免费或开源的)?我最好寻找可以绕过操作系统(Windows或Linux)并直接从Java工作的解决方案.我也非常理想地寻找能够以微秒精度运行的东西.我考虑过NTP,但我不确定它是否可以通过Java而不是通过操作系统获得,而且我不确定它的复杂性.

3)有没有办法确定在特定配置(或我最终使用的任何解决方案)中使用NTP的误差范围,以便我可以在计算延迟时给出误差幅度?

谢谢!

Aid*_*ell 4

对于分布式编程,时钟同步通常是不够的。您可能想要构建一个逻辑时间框架(例如 Lamport 或矢量时钟或 Singhal-Kshemkalyani 方法......并且还有更多方法可以保持跨机器的因果关系同步)。您的选择通常取决于应用程序和事件之间所需的因果关系。

时钟同步以确保并发事件保持正确的顺序。除了保持系统时钟同步之外,还有其他方法可以做到这一点……除非它们共享一个共同的物理时钟……这是相当棘手的。

针对NTP误差范围,有以下解决方案:

我的建议:

阅读: 分布式计算:原理、算法和系统

特别是:第三章,逻辑时间

编辑

根据 Cheeso 的帖子,我发现

http://www.uniforum.org/publications/ufm/apr96/opengroup.html

http://sourceforge.net/projects/freedce

那里可能有 DCE Java 绑定。