我已经读过很多遍了(尽管我现在找不到),数据中心会竭尽全力确保所有服务器都具有完全相同的时间。包括但不限于担心leap秒。
为什么服务器具有相同的时间如此重要?实际的公差是多少?
我已经读过很多遍了(尽管我现在找不到),数据中心会竭尽全力确保所有服务器都具有完全相同的时间。包括但不限于担心leap秒。
为什么服务器具有相同的时间如此重要?实际的公差是多少?
Answers:
通常,时间戳记用于各种身份验证协议中,以帮助防止重播攻击,攻击者可以在其中重用他能够窃取的身份验证令牌(例如,通过嗅探网络)。
例如,Kerberos身份验证正是这样做的。在Windows中使用的Kerberos版本中,默认公差为5分钟。
用于双重身份验证的各种一次性密码协议(例如Google Authenticator,RSA SecurID等)也使用此方法。在这些情况下,公差通常在30至60秒左右。
如果客户端和服务器之间没有时间同步,则无法完成身份验证。(在最新版本的MIT Kerberos中,通过使请求者和KDC确定身份验证期间它们的时钟之间的偏移量,已消除了此限制,但是这些更改发生在Windows Server 2012 R2之后,在Windows中看到它还需要一段时间。版本。但是2FA的某些实现可能总是需要同步时钟。)
使时钟同步可以更轻松地使用不同的系统。例如,如果所有系统都具有相同的时间,则关联来自多个服务器的日志条目要容易得多。在这些情况下,您通常可以使用NTP提供的1秒公差,但是理想情况下,您希望时间尽可能地保持紧密同步。提供更严格的公差的PTP实施起来可能会更加昂贵。
make
客户机/服务器NFS之间的时钟偏差也使它感到困惑。
主要是因为它可以关联来自不同设备上的日志的事件。假设发生安全事故,有人通过您的Web服务器访问您的数据库-您希望防火墙,负载均衡器,Web服务器和数据库服务器上的时间戳都匹配,以便可以在每个设备上找到日志与事件有关。理想情况下,您希望一切都在几毫秒之内。而且它需要与实际的外部时间保持同步,这样,如果有必要,您还可以将日志与第三方日志关联起来。
从管理的角度来看,这不仅很重要,而且从应用程序级别相关性来看,使时钟同步也很重要。这取决于解决方案的设计方式,正在运行的应用程序如何获得与可能使用的任何事务的时间戳。我已经看到事务验证失败,因为与在与之交互的其他应用程序相比,应用程序在服务器上运行的偏移量太大(将来大约是20秒)。
同样,如果在例如VMWare ESXi服务器上进行虚拟化,并且VM的时间与虚拟机管理程序的时间不同步,则诸如vmotion之类的操作可能会将VM时钟与虚拟机管理程序重新同步,这又可能导致无法预测的结果如果时差足够大。
我不知道实际的公差是多少,因为我认为这在很大程度上取决于所使用的系统类型,但是我认为通常来说,将数据中心中的服务器彼此之间的偏移时间保持在一秒以内是可以实现的。
由于您提到了leap秒,因此应注意它们需要特别困难的处理。
通常是通过注入23:59:60秒来添加它们,如果您要验证分钟和秒字段的时间戳为0-59,这是有问题的。重复23:59:59使其长2秒的替代方法并没有改善多少,因为这会与对时间敏感度降低到每秒一秒的任何东西发生冲突。
Google实际上早就提出了一个不错的解决方案,似乎尚未被广泛采用。他们的解决方案是应用“拖尾”并在一段时间内划分更改,整个过程由NTP服务器管理。他们早在2011年就发布了一个有关该博客的博客,该博客引起了有趣的阅读,并且似乎与此问题相关。
我同意以上所有观点。我想提出更多的想法。
一些数据库,例如Cassendra,严重依赖时间戳。这就是它处理并发的方式。
不同的时间戳会完全破坏数据库。