Tenemos un gran sistema de software de alto rendimiento que consta de múltiples procesos de Java que interactúan (no EJB). Cada proceso puede estar en la misma máquina o en una máquina diferente.¿Existe una solución de sincronización de reloj lista para usar para Java?
Ciertos eventos se generan en un proceso, y luego se propagan de diferentes maneras a otros procesos para su posterior procesamiento, y así sucesivamente.
Para la evaluación comparativa, necesitamos crear un registro de cuándo cada evento pasó por un "punto de control", eventualmente combinar estos registros para obtener una línea de tiempo de cómo cada evento se propagó a través del sistema y con qué latencia (por supuesto, proceso conmutación y IPC agrega latencia, lo cual está bien).
El problema, por supuesto, es la sincronización del reloj. Así que aquí están mis preguntas:
1) Si todos los procesos están en la misma máquina, ¿se garantiza que currentTimeMilis sería precisa en el momento de la llamada? ¿Hay algún límite en los errores de ITP?
2) Si algunos procesos pueden estar en máquinas diferentes, ¿existe una solución lista para usar (que también sea gratuita o de código abierto) para la sincronización del reloj? Prefiero buscar una solución que pueda eludir el sistema operativo (Windows o Linux) y trabajar directamente desde Java. También estoy idealmente buscando algo que pueda operar con una precisión de microsegundos. He pensado en NTP, pero no estoy seguro si está disponible a través de Java en lugar de a través del sistema operativo, y no estoy seguro de su complejidad.
3) ¿Hay alguna manera de determinar el margen de error al usar NTP en una configuración particular (o de cualquier solución que termine usando) para poder dar un margen de error en nuestro cálculo de la latencia?
Gracias!
Recuerdo el libro de la universidad. Nuestro proyecto en este momento está buscando algo rápido y razonablemente preciso, no podemos ser las primeras personas en necesitar algo como esto. Me preguntaba si hay una implementación disponible. – Uri
No es que yo sepa, pero con JVM habrá muchas latencias. El entorno del programa no está muy acoplado y puede bloquearse (en GC, etc.). No soy un experto en Java sin embargo. –