Работа с неточными системными часами - PullRequest
5 голосов
/ 18 августа 2011

У меня есть система на базе Windows, которая находится на экземпляре Amazon EC2. Существует известная проблема, что у экземпляров Windows EC2 возникают проблемы с синхронизацией системного времени. Я случайно войду в систему и обнаружу, что мои системные часы находятся в диапазоне от пары секунд (не слишком большая сделка ...) до нескольких минут или даже часов (очевидно, огромная сделка).

Учитывая, что главная цель моего сайта - выпускать ссылки на защищенный контент S3, который заблокирован по довольно строгому временному ограничению (т. Е. Иногда всего от 30 секунд до минуты), для меня это огромная проблема. Изучение справочных форумов Amazon дало много ответов, которые просто не работают, и Amazon, похоже, игнорирует проблему, утверждая, что она связана с Windows. Несмотря на это, я решил взять вещи в свои руки и не ждать на Амазоне.

Вещи, которые я рассмотрел:

  • Создание службы, которая обращается к списку серверов времени каждый час или около того, получает текущее время, вычисляет смещение, а затем использует это смещение для создания точных ссылок. Недостатком является то, что мне нужен значительный список серверов времени, чтобы они не мешали мне слишком часто их посещать. Кроме того, если время будет случайно зафиксировано в середине одного из этих периодов, мои ссылки снова начнут разрываться.
  • Создание экземпляра Linux EC2 и поиск способа получения его внутреннего времени. Я ничего не читал о том, насколько точны их времена в EC2, но я должен был бы предположить, что это лучше, чем этот вздор.
  • Хостинг моего сайта в другом месте с точными часами ...

Есть ли другие варианты, о которых вы можете подумать, что я, возможно, пропустил? Я не против того, чтобы что-либо, за исключением того, что я переписывал свой сайт на другом языке, чтобы отойти от Windows (в настоящее время это приложение .Net MVC).

Заранее спасибо!

РЕДАКТИРОВАТЬ: Также обратите внимание, что я не могу использовать безопасность на основе реферера, так как используемые мной плагины, использующие эти ссылки, не на 100% отправляют реферера в некоторых браузерах.

Ответы [ 4 ]

3 голосов
/ 14 сентября 2011

Странно, что ваши серверы должны дрейфовать несколько часов.По умолчанию Windows Server 2008 R2 настроен для NTP-синхронизации своих часов с time.windows.com каждые 900 секунд (15 минут).Если это не дает вам необходимой своевременности, вы можете увеличить частоту, изменив ключ реестра .

Если вы размещаете приложение ASP.NET, вам следует рассмотреть возможность его запуска на AppHarbor .Мы работаем поверх EC2, но убираем унылые задачи управления сервером, такие как обеспечение синхронизации часов.

0 голосов
/ 18 апреля 2014

изменил интернет-сервер времени на "time.nist.gov", он исправил время.

0 голосов
/ 08 февраля 2014

Я уже несколько недель сталкиваюсь с той же проблемой и обнаружил, что корень моей проблемы прост:

Убедитесь, что ваш сетевой ACL разрешает входящий трафик UDP.

0 голосов
/ 18 августа 2011

вы можете попробовать создать приложение на вашем экземпляре Windows или Linux, если вы решите пойти по этому пути, и всякий раз, когда вам нужно будет узнать, сколько времени, отправьте запрос API куда-то вроде этого: http://worldtimeengine.com/api/ чтобы получить текущее местное время.

если вы не можете полагаться на часы экземпляра, тогда получите время откуда-то еще:)

...