Как использовать NTP-сервер при планировании задач в приложении Java? - PullRequest
2 голосов
/ 03 апреля 2012

Я знаю, что NTP-серверы могут использоваться для синхронизации системных часов вашего компьютера. Но может ли NTP использоваться приложением, которое хочет синхронизировать события с другими системами?

Сценарий: разработка java-приложения (возможно, для запуска в ESB, таком как Mule), и вы не обязательно сможете контролировать время машины, на которой оно будет работать. Может ли ваше приложение использовать NTP-сервер для получения заданий времени и расписания для запуска на основе этого времени?

Допустим, вы используете Quartz в качестве планировщика и, возможно, Joda-Time для обработки времени (если это полезно). Время не должно быть сверхточным, просто нужно быть уверенным, что далеко не опередим удаленные системы.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Если вы не очень беспокоитесь о дрейфе и предполагаете, что машины не просто случайным образом меняют время, то вы можете пропинговать NTP-сервер, чтобы узнать, сколько времени думает ИТ-отдел, и сравнить это с вашим локальным временем.машина думает, что это так, затем вычислите разницу и, наконец, запланируйте вашу задачу по местному времени.

Так, например, скажем, что сервер NTP говорит, что это 12:30, а ваша локальная машина говорит, что это12:25.И вы хотите, чтобы ваша задача сработала в 13:00 по времени NTP.

Итак, 12:25 - 12:30 = -0: 05.13:00 + (-0: 05) = 12:55, поэтому вы планируете задание на 12: 55.

Дополнения -

Я не могу говорить о наивностиреализация, я не достаточно знаком с протоколом.

В конце концов, все сводится к тому, какой уровень практической точности приемлем для вас.NTP используется для синхронизации времени между системами.Одна из проблем, которую он решает, состоит в том, что он постоянно вызывается, он предотвращает проскальзывание часов.Если вы используете технику «NTP Ping, расписание со смещением» и, скажем, в будущем время, вероятно, будет 8 часов в будущем, вполне возможна вероятность ползучести часов, что означает, что, хотя вы и хотели, чтобы задание сработало »12:55 ", когда возвращается 12:55, он может быть отключен от исходного NTP-сервера, поскольку часы не были синхронизированы (вообще), и задание не было перенесено на виртуальную повторную синхронизацию.

Очевидно, что чем дольше период между исходным графиком и фактическим исполнением, тем больше вероятность дрейфа.Это артефакт, независимо от того, насколько хорош исходный пинг NTP.Если вы не планируете перепланировать эти задачи, поскольку они приближаются к времени выполнения, чтобы компенсировать дрейф, то, скорее всего, подойдет любая «разумная» реализация NTP.

Есть библиотека Apache Commons NET, которая имеетклиент NTP.Некоторые жалуются, что он использует System.currentTimeMillis (), который имеет (имел?) Проблемы с разрешением (10-15 мс) в Windows.System.nanoTime решает эту проблему, и вы можете легко изменить библиотеку, чтобы использовать ее, и перестроить ее.

Я не могу говорить о том, как она отражает «наивность» реализации.Но в конечном итоге все сводится к тому, насколько близко нужно синхронизировать две машины и их рабочие места (виртуально).

0 голосов
/ 03 апреля 2012

Моя интуиция говорит мне, что NTP требует аппаратных настроек часов, чтобы не отставать. Поэтому, если у вас нет доступа к оборудованию, вы не можете это сделать.

Однако, если этого достаточно для обеспечения точности в несколько секунд, вы можете периодически отправлять время выборки с сервера, чтобы рассчитать перекос между системными часами и настроить запланированное время для заданий.

0 голосов
/ 03 апреля 2012

Но может ли NTP использоваться приложением, которое хочет синхронизировать события с другими системами?

Я никогда не слышал о том, чтобы его использовали таким образом. Однако ничто не помешает вам реализовать клиент для сетевого протокола времени (RFC 1305). Полная реализация NTP, вероятно, излишня, но вы также можете использовать протокол в режиме SNTP (RFC 2030).

Возможно, вы захотите настроить и использовать локальный NTP-сервер, если вам нужна высокая доступность и разумная точность.

Поиск в Google показывает, что существует множество клиентов Java NTP ...

...