我已经多次阅读(尽pipe目前我找不到),数据中心需要花费很大的努力来确保所有的服务器都有完全相同的时间。 包括但不限于闰秒。
为什么服务器有同样的时间这么重要? 那实际的公差是多less?
通常,各种身份validation协议使用时间戳来帮助防止重放攻击 ,攻击者可以重用他能够窃取的身份validation令牌(例如通过嗅探networking)。
Kerberos身份validation就是这样做的,例如。 在Windows中使用的Kerberos版本中,默认容差是5分钟。
这也被各种用于双因素authentication的一次性密码协议所使用,例如Google Authenticator,RSA SecurID等。在这些情况下,公差通常在30-60秒左右。
如果客户端和服务器之间没有时间同步,则无法完成身份validation。 (通过让请求者和KDC在authentication过程中确定它们的时钟之间的偏移量,但在Windows Server 2012 R2之后发生这些更改,并且在Windows中看到它之前一段时间,此限制在最新版本的MIT Kerberos中被删除版本,但是2FA的一些实现可能总是需要同步的时钟。)
使时钟同步使得与不同系统一起工作变得更容易。 例如,如果所有系统具有相同的时间,则关联来自多个服务器的日志条目要容易得多。 在这些情况下,您通常可以使用NTP提供的1秒的容差,但理想情况下,您希望时间尽可能紧密同步。 提供更严格的公差的PTP实施起来可能要昂贵得多。
主要是,您可以将来自不同设备上的日志的事件关联起来。 假设有人通过Web服务器访问数据库时发生安全事件 – 您希望防火墙,负载均衡器,Web服务器和数据库服务器上的时间戳全部匹配,以便您可以在每个设备上find日志涉及事件。 理想情况下,你希望一切都在几毫秒之内。 它需要与实际的外部时间保持同步,以便您还可以将日志与第三方日志相关联(如果有必要)。
从pipe理的angular度来看,这不仅是重要的,而且具有同步的时钟同样也是我们从应用程序级别相关性中重要的。 这取决于解决scheme是如何devise的,运行的应用程序如何获得它们可能使用的任何事务的时间戳。 我看到交易validation失败,因为在服务器上运行的应用程序的偏移量太大(将来大约需要20秒),而与其他交互的应用程序相比,交易validation失败。
同样,如果在VMWare ESXi服务器上进行虚拟化,并且虚拟机的时间与虚拟机pipe理程序的时间不同步,则类似vmotion的操作可能会使虚拟机时钟与虚拟机pipe理程序重新同步,从而导致不可预知的结果如果时间差足够大的话。
我不知道有什么实际的容差,因为我认为这取决于什么types的系统,但我认为一般来说,保持数据中心内的服务器彼此之间的偏移不到一秒钟是可以实现的。
既然你提到了闰秒,应该指出,他们需要特别难处理。
它们通常是通过在23:59:60之间插入一秒来添加的,如果您将分钟和秒数字段的时间戳记validation为0-59,则会出现问题。 重复23:59:59使它变长2秒的select并不好,因为这会混淆时序敏感度下降到每秒一级的任何事情。
谷歌其实提出了一个好的解决scheme,似乎还没有被广泛采用。 他们的解决scheme是实施一个跨越式的“涂抹”,并在一段时间内将这种变化分开,整个过程由NTP服务器来pipe理。 他们在2011年发表了一篇关于它的博客 ,对这个问题进行了有趣的阅读。
每当涉及时间戳时,解除同步的设备可能会创build逻辑不一致性,如:A向B发送查询,B的回复带有比查询更早的时间戳,可能导致A忽略它。
我同意上面的所有观点。 我想抛出更多的想法
有些数据库如Cassendra严重依赖时间戳 。 这是它处理并发的方式。
不同的时间戳将会使数据库变得糟糕。