У нас есть большая высокопроизводительная программная система, которая состоит из нескольких взаимодействующих Java-процессов (не EJB). Каждый процесс может быть на одной и той же машине или на другой машине.
Некоторые события генерируются в одном процессе, а затем по-разному распространяются на другие процессы для дальнейшей обработки и т. Д.
Для целей бенчмаркинга нам нужно создать журнал, когда каждое событие прошло через «контрольную точку», в конечном итоге объединить эти журналы, чтобы получить временную шкалу того, как каждое событие распространялось через систему и с какой задержкой (конечно, переключение процессов и IPC добавляет задержку, что нормально).
Проблема, конечно же, в синхронизации часов. Итак, вот мои вопросы:
1) Если все процессы выполняются на одном компьютере, гарантируется ли, что currentTimeMilis будет точным во время вызова? Есть ли какие-то ограничения на ошибки ITP?
2) Если некоторые процессы могут быть на разных машинах, есть ли готовое решение (то есть бесплатное или с открытым исходным кодом) для синхронизации часов? Я предпочтительно ищу решение, которое может обойти операционную систему (Windows или Linux) и работать прямо с Java. Я также в идеале ищу что-то, что может работать с точностью до микросекунды. Я думал о NTP, но я не уверен, доступен ли он через Java, а не через ОС, и я не уверен в его сложности.
3) Есть ли способ определить предел погрешности при использовании NTP в конкретной конфигурации (или в любом решении, которое я в конечном итоге использую), чтобы я мог дать предел погрешности при нашем вычислении задержки?
Спасибо!