目前,我们的网络应用程序包含一种逻辑,通过将数据的时间戳与服务器的日期/时间进行比较来检查发送到网络服务器的数据是否过期。
一切顺利,直到数据中心的某个人意外修改了某个 Web 服务器的日期/时间,导致我们的 Web 服务出现一些中断。我的经理当然对此不满意,并说我们不应该首先使用时间戳来检查到期时间……无论如何……
由于数据中心分布在不同大洲,因此我们在每个数据中心都部署了一台 NTP 服务器,因此我们实施了网络时间协议。数据中心内的服务器将使用 cron 作业来检查同一数据中心的 NTP 服务器的时间。如果时间不同步,它将自动更新服务器日期/时间。
但我们的管理人员对此并不满意,并认为它仍然很容易导致同样的问题。例如,如果有人意外修改了 NTP 日期/时间怎么办?如果所有 NTP 服务器彼此不同步怎么办?我们真正可以信任哪些 NTP 服务器?等等。
我的问题是:
- 目前跨多个数据中心或位置的服务器之间同步日期/时间的做法是什么?
- 如何管理 Web 应用之间的时间戳?例如,服务器 A 将数据(包含服务器 A 的时间戳)发送到服务器 B(比较服务器 B 之间的时间戳和数据中的时间戳,以查看数据是否已过期。这是为了避免 HTTP 重放)
- 我们真的不应该使用时间戳检查吗?
感谢并致以最诚挚的问候
答案1
数据中心的一些人意外修改了某个 Web 服务器的日期/时间
这是你遇到的第一个问题。它很可能是由以下因素造成的:
- “数据中心的工作人员”没有接受足够的培训,
- 权限过高
更改系统时间需要管理员权限。在不仅时间正确而且使用 NTP 管理时间的系统上手动更改时间是培训不足的表现。首先解决此问题,因为在解决此问题之前,准确的系统时间可能是最明显的问题。他们还在该系统上做什么,为什么?
我的经理……说我们不应该首先使用时间戳来检查到期日期
如果有人提出可行的替代方案,我至少会考虑。不知为何,我怀疑情况并非如此。
实施网络时间协议,由于数据中心分布在不同的大陆,因此我们在每个数据中心都有一个 NTP 服务器。
我建议每个数据中心都安装两个。我会让它们各自引用一组不同的外部 NTP 服务器,并相互引用。这样时间会更稳定,对单一故障的鲁棒性也会更强。我也很偏执,喜欢过度设计,所以就是这样。不过,NTP 服务器在资源方面几乎不需要,所以无论在哪里都可以运行它们。
数据中心内的服务器将有 cron 作业来检查同一数据中心的 NTP 服务器的时间。如果时间不同步,它将自动更新服务器日期/时间。
这是一个糟糕的计划。Cron 无法在 NTP 系统中更改时间。服务器应运行真正的 NTP 客户端。这些客户端应分别引用(两个)本地 NTP 服务器。
如果要使用 cron,请在每台服务器上使用 cron 来验证服务器是否已成功与两个本地 NTP 服务器同步。您可以通过检查 ntpq 命令的输出来执行此操作。您应该了解 ntpq 命令的输出;它是您的朋友。
为了回答您报告所提出的问题:
但我们的管理人员对此并不满意,并认为它仍然很容易导致同样的问题。例如,如果有人意外修改了 NTP 日期/时间怎么办?如果所有 NTP 服务器彼此不同步怎么办?我们真正可以信任哪些 NTP 服务器?等等。
第一个问题并不疯狂。如果极端一点,就有点偏执,但没关系。答案是:
- 使用多个独立参考时钟。(相比来自其他来源的稳定时间,单个错误将被忽略)
- 使用可信赖的参考时钟(例如 GPS)(如果您的操作人员可以意外修改 GPS 卫星上的时间,那么您遇到的问题比 Web 服务器时钟更严重。)
- 使用加密密钥来确保您通信的参考时钟是您信任的。
第二个问题可以通过配置 NTP 服务器来相互参考来解决。在其他条件相同的情况下,它们会趋于一致。也可以通过使用独立的、值得信赖的参考时钟来解决。
- 如果三个较低层参考时钟中的一个不同步,它将被忽略。
- 如果两个人严重不同步,他们就会被忽视。
- 如果所有三个时钟严重不同步,NTP 将忽略所有这三个时钟并尽力而为(仍然相当不错,特别是如果有一个同层时钟可以参考的话。)
- 您几乎只需要担心这里的恶意攻击。
描述这些情况可能会很复杂,但 NTP 首先是稳定的,如果有准确的来源,则是准确的。
就信任而言,大多数运行公共 NTP 服务器的人没有理由干扰您的时间。他们中的许多人都有理由提供准确的时间。就提供准确时间的兴趣程度而言,我建议:
- GPS 卫星。
- NIST NTP 服务器。
- 任何知名的第一层提供商。
- 任何知名的 2 层提供商。
- 您的数据中心(假设您购买了托管服务)可能应该有一个或三个自己的 NTP 服务器,供自己使用。
此外,这一点也很重要:网络时间协议 (NTP)协议旨在将时间同步到毫秒以内。 不是秒。 如果你使用 cron+ ntpdate,你的时间可能会相差几秒(感谢可变延迟!)。在类似情况下,NTP 将使您的时钟更加稳定和准确。
答案2
为所有服务器正确配置 NTP 和 GMT 是最佳做法。您可以购买 GPS 主时钟服务器,如果这是一笔大买卖,您有足够的资金,并且可以证明为每个数据中心购买一台是合理的。这似乎是一个运营问题——他们应该监控服务器上的时间,并在时间严重失常时发出警报。