有哪些软件可能会因时间跳跃而受到严重影响?

有哪些软件可能会因时间跳跃而受到严重影响?

chrony 文档警告

请注意:某些软件会受到系统时间此类跳跃的严重影响。(这就是 chronyd 正常使用摆动的原因。)文档

但文档中没有给出例子。哪些软件会受到严重影响?操作系统或任何后台进程是否处于危险之中?

答案1

这是一个开放性的问题,但让我举几个例子:

  • 数据库 - 大多数数据库依赖大量精确的时间来存储记录、索引等
  • 安全性 - 精确的时间对于安全性非常重要,可以将动作映射到时间,并且不接受间隙或时间重复
  • 数字签名 - 签名文件的一部分通常是时间戳,因此错误的时间可能会使签名无效
  • 调度软件——可以根据时间跳跃方向跳过或重复两次作业。
  • 集群软件 - 可能任何集群都需要同步,并且一个或多个节点的任何跳跃都可能产生不可预测的结果。

答案2

我最近被一个可以追溯到 1999 年的错误所困扰,它影响了 JVM 和 Android 运行时:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4290274

...当使用 scheduleAtFixedRate() 安排任务后,将系统时钟提前一分钟时,会(意外地)触发两次额外执行。

我使用的设备以 1970 年纪元作为当前时间,然后稍后接收正确的网络时间。有时第三方库会在时间设置之前初始化,导致它经历 50 年的时间跳跃。

结果是scheduleAtFixedRate试图赶上大约 50 年的调用量……大约是 27百万连续调用,中间没有延迟。

这会导致 GC 失控,并且通常会使系统陷入瘫痪,直到重新启动

答案3

所有与实际硬件交互的软件。如果你有一个烤面包机,烤面包需要 20 秒,而它的软件愚蠢到会与挂钟进行比对,那么如果你在等待烤面包时调整时钟,你得到的要么是白面包,要么是烤焦的面包。

实际上,控制任何类型工业设备的所有应用都需要精确计时,例如“打开阀门 5.3 秒以获得正确的流体量”。偏差超过几毫秒就会损坏您的产品。

使用电机定位任何物体的应用程序要么使用步进电机(速度较慢),要么使用终端开关来确定何时停止。但通常情况下,您不会在每个重要位置都安装开关,因此您会执行一些“xm/s 表示 A 毫秒,然后 ym/s 表示 B 毫秒”的逻辑。现在想象一下,在运行此逻辑时,您的 NTP 守护程序会调整时间,哪怕只是一毫秒……

答案4

多夫科特IMAP 服务器会受到影响,并且(在旧版本中)如果检测到系统时间倒退,它会(故意)自杀。在 v2.0 中,它至少会尝试补救这种情况。

https://wiki.dovecot.org/TimeMovedBackwards

相关内容