2011-08-18 49 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”,它更正了时间。