2011-08-18 51 views
5

處理我有一個在Amazon EC2實例坐在一個基於Windows的系統。存在一個已知問題,即Windows EC2實例在保持系統時間同步方面存在問題。我將隨機登錄到系統中,並發現我的系統時鐘是任何地方從一對夫婦秒掉(不算什麼大不了的事......)到幾分鐘甚至幾小時關閉(顯然是一個巨大的交易)。有不準確的系統時鐘

考慮到我的網站的主要目標是發佈鏈接到受到相當嚴格的時間限制(即有時只需30秒到一分鐘)鎖定的安全S3內容,這對我來說是一個巨大的問題。淘寶亞馬遜的幫助論壇已經取得了很多答案,根本行不通,亞馬遜似乎忽略了聲稱與Windows相關的問題。無論如何,我決定把事情掌握在自己手中,而不是等亞馬遜。

事情我已經考慮:

  • 創建擊中每隔一小時時間服務器列表的服務,所以,獲取當前時間,計算偏移,然後使用這個偏移量,以產生精確鏈接。缺點是我需要有大量的時間服務器,以防止他們經常打他們。另外,如果時間在這些時段中的某個時段被隨機固定,我的鏈接將再次開始打破。
  • 創建Linux EC2實例和查找得到其內部時的一些方法。我沒有看到他們的時間在EC2內有多準確,但我不得不認爲這個廢話更好。
  • 託管我的網站的其他地方有精確的時鐘...

是否有你能想到的任何其他選項我可能錯過了什麼?我並沒有真正反對任何有一個例外情況,即用另一種語言重寫我的網站,以便從Windows中移出(目前它是一個.Net MVC應用程序)。

在此先感謝!

編輯:另外值得注意的是,我不能使用基於引用的安全,因爲我使用的是使用這些鏈接不100%發送引用在一些瀏覽器插件。

+0

正如許多所描述的答案,你應該專注於糾正時間,而不是接受錯誤的價值。許多與安全有關的設計(如Kerberos等)都是時間敏感的,並且可以主動突破自我來警告你時間不對。當然,故障排除對於揭示原因非常重要,https://msdn.microsoft.com/zh-cn/library/bb727060.aspx –

回答

0

你可以嘗試在你的windows實例或linux實例上創建一個應用程序,如果你選擇這樣做,並且每當你需要知道什麼時候發送一個api請求到這樣的地方:http://worldtimeengine.com/api/來獲得當前當地時間。

如果你不能依靠實例的時鐘,然後獲得來自其他地方的時間:)

+0

這就是我在上面的第一個選項中所用的基本原理。雖然我沒有看到特別的時間服務,但謝謝。 – jamesmillerio

+0

facepalm!我一定錯過了第一個選擇,道歉重複它。我的眼睛跳到了linux部分......但是我認爲這可能是您的最佳解決方案。時鐘不準確提示了亞馬遜雲特有的一些問題,所以除非你可以在其他地方託管,這可能是最好的解決方案 – jammypeach

3

很奇怪,你的服務器應該漂流幾個小時。默認情況下,Windows Server 2008 R2配置爲每900秒(15分鐘)將它的時鐘與time.windows.com進行NTP同步。如果這沒有得到您所需的時間,您可以increase the frequency by modifying a registry key

如果你正在主持一個ASP.NET應用程序,你應該考慮AppHarbor運行它。我們運行在EC2之上,但是要拿走沉悶的服務器管理任務,例如確保時鐘同步。

0

我一直在處理同樣的問題,好幾個星期,發現我的問題的根源很簡單:

確保您的網絡ACL允許入站UDP流量。

0

將互聯網時間服務器更改爲 「time.nist.gov」,它更正了時間。