Я занимаюсь написанием простой функции синхронизации в своем приложении, и одна из проблем, которые возникли, - это синхронизация времени между двумя удаленными компьютерами, каждая со своими часами (в частности, относительно дат изменения файлов/объектов).
Я уверен, что на эту тему было проведено много исследований, и вы не хотите слишком теоретически, но мне интересно, есть ли какие-либо приемлемые рекомендации по минимизации временных несоответствий между удаленными часами?
Например, начало - всегда использовать универсальное время (UTC), поскольку это позволяет избежать проблем с часовым поясом, но нет гарантии, что два компьютера будут иметь точно такое же системное время. К счастью, работа, которую я делаю, не очень тонкая, поэтому это не очень важно, но мне все же любопытно, тем не менее.
Одним из решений было бы всегда использовать одни и те же часы на обоих концах, например глобальный сервер времени, а не локальные системные часы. Предположительно это (в сочетании с разделяемыми блокировками ресурсов) может гарантировать случайное перекрытие синхронизированного времени, но это не очень практично.
Одна мысль, которая просто появилась в моей голове, - синхронизировать каждый node (каждый клиент) со смещением, вычисленным в какой-то момент раньше, возможно, путем вычисления смещения системных часов с глобальным сервером времени. Это нужно будет делать только иногда, поскольку само смещение вряд ли сильно изменится в течение короткого периода времени.
Обновление:. Позвольте мне добавить, что меня не интересует фактическая синхронизация системных часов двух компьютеров. Я полагаю, что в большинстве случаев операционная система будет обрабатывать это. Это всего лишь вопрос о том, как обеспечить, чтобы два экземпляра приложения использовали синхронизированное время, хотя в этот день и возраст я предполагаю, что системные часы почти наверняка будут синхронизированы в пределах какой-то очень маленькой дельта в любом случае.