Mamy duży, wysoce wydajny system oprogramowania, który składa się z wielu interaktywnych procesów Java (nie EJB). Każdy proces może znajdować się na tej samej maszynie lub na innej maszynie.Czy istnieje gotowe do synchronizacji rozwiązanie synchronizacji zegarów dla Javy?
Niektóre zdarzenia są generowane w jednym procesie, a następnie są propagowane na różne sposoby do innych procesów w celu dalszego przetwarzania i tak dalej.
Dla celów analizy porównawczej, musimy utworzyć dziennik, w którym każde zdarzenie przechodzi przez "punkt kontrolny", ewentualnie połączyć te dzienniki, aby uzyskać oś czasu, w którym każde zdarzenie jest propagowane przez system i jakie opóźnienie (oczywiście proces przełączanie i IPC dodaje opóźnienie, co jest ok).
Problemem jest oczywiście synchronizacja zegara. Tak oto moje pytania:
1) Jeśli wszystkie procesy są na tym samym komputerze, czy jest zagwarantowane, że currentTimeMilis byłby dokładny w czasie połączenia? Czy są jakieś błędy związane z błędami ITP?
2) Jeśli niektóre procesy mogą znajdować się na różnych urządzeniach, czy istnieje gotowe do użycia rozwiązanie (również bezpłatne lub z otwartym kodem źródłowym) do synchronizacji zegara? Preferuję rozwiązanie, które może ominąć system operacyjny (Windows lub Linux) i pracować bezpośrednio z poziomu Javy. Idealnie szukam czegoś, co może działać z dokładnością do mikrosekundy. Myślałem o NTP, ale nie jestem pewien, czy jest on dostępny przez Javę, a nie przez system operacyjny, i nie jestem pewien jego złożoności.
3) Czy istnieje sposób określenia marginesu błędu w korzystaniu z NTP w konkretnej konfiguracji (lub dowolnego rozwiązania, z którego korzystam), aby dać margines błędu w obliczeniach opóźnienia?
Dzięki!
Pamiętam książkę z college'u. Nasz projekt w tej chwili szuka czegoś szybkiego i dostatecznie dokładnego, nie możemy być pierwszymi ludźmi, którzy potrzebują czegoś takiego. Zastanawiałam się, czy istnieje możliwość wprowadzenia na półkę. – Uri
Nie wiem, ale z JVM będzie dużo opóźnień. Środowisko programu nie jest silnie sprzężone i może zawiesić się (w GC i tak dalej). Nie jestem jednak ekspertem od Javy. –