Wir haben ein großes Hochleistungs-Software-System, das aus mehreren interagierenden Java-Prozessen (nicht EJBs) besteht. Jeder Prozess kann sich auf derselben Maschine oder auf einer anderen Maschine befinden.Gibt es eine Uhrzeitsynchronisierungslösung für Java?
Bestimmte Ereignisse werden in einem Prozess generiert und dann auf andere Weise an andere Prozesse zur weiteren Verarbeitung weitergegeben.
Für Benchmarking-Zwecke müssen wir ein Protokoll erstellen, wann jedes Ereignis einen "Checkpoint" durchlaufen hat, schließlich diese Protokolle kombinieren, um einen Zeitplan zu erhalten, wie sich jedes Ereignis im System ausbreitet und mit welcher Latenz (natürlich, Prozess Switching und IPC fügt Latenz hinzu, was in Ordnung ist).
Das Problem ist natürlich Uhrzeitsynchronisation. Also hier sind meine Fragen:
1) Wenn alle Prozesse auf der gleichen Maschine sind, ist es garantiert, dass currentTimeMilis zum Zeitpunkt des Anrufs genau wäre? Sind die Fehler von ITP in Grenzen?
2) Wenn sich einige Prozesse auf verschiedenen Maschinen befinden, gibt es eine Standardlösung (die auch frei oder Open-Source ist) für die Uhrzeitsynchronisation? Ich suche vorzugsweise nach einer Lösung, die das Betriebssystem (Windows oder Linux) umgehen und direkt von Java aus arbeiten kann. Ich suche auch ideal nach etwas, das mit Mikrosekunden genau arbeiten kann. Ich habe über NTP nachgedacht, aber ich bin mir nicht sicher, ob es über Java und nicht über das Betriebssystem verfügbar ist, und ich bin mir nicht sicher, wie komplex es ist.
3) Gibt es eine Möglichkeit, die Fehlerquote bei der Verwendung von NTP in einer bestimmten Konfiguration (oder einer beliebigen Lösung, die ich verwende) zu bestimmen, damit ich eine Fehlermarge bei der Berechnung der Latenz angeben kann?
Danke!
Ich erinnere mich an das Buch vom College. Unser Projekt sucht momentan nach etwas schnellem und einigermaßen genauem, wir können nicht die ersten Leute sein, die so etwas brauchen. Ich habe mich gefragt, ob es eine Implementierung von der Stange gibt. – Uri
Nicht, dass ich weiß, aber mit JVM wird es viele Latenzen geben. Die Programmumgebung ist nicht stark gekoppelt und kann stehen bleiben (auf GC usw.). Ich bin jedoch kein Java-Experte. –