我们公司每天中午午休时候会关灯。由于每次关灯时间都不一样,我徒弟说说这一看就是为人的。机器执行理论上都是一个时间点。就这句话我想起来我十几年前遇到的一次问题。那次问题就是机器执行,但是时间就是不准的。
时间回到2008年,那时候我技术还很一般。有一个项目我去现场实施,那个项目说起来悲催。第一次去北京奥运会还没开幕,第二次去伦敦奥运会都闭幕了。你说这种项目还谈什么规范。
继续说2008年的时候,我实施过后又一天公安的甲方找我,让我查查为什么时间不对。发现时钟和北京时间差了半个小时。这种对于公安的业务来说是有极大问题的。比如违法处理,当事人说我这个时间点不在这里。不是我的,不承认。还有追踪在逃等问题就会错过排查。我当时就想怎么可能误差这么大吗?这计算机的时钟怎么比手表还误差大?一看还真的差了半小时。那么我就手工对时一下。那时候我还不懂NTP的对时,即使懂,那时候也没条件做。对时完毕,我就想第二天看看是不是解决了。结果第二天发现慢了90多秒。这个误差还真大,我做过了很多项目第一次遇到这个。于是各种猜测,比如重新安装操作系统,我甚至都要求服务器厂商来进行把主板整体替换等手段最后依然无法解决。我想如果我离开后没有人天天过来对时,时间一长必然误差很大。我岂不是走不了了?
最后不得已我想到的一个办法是,既然一天24小时慢90多秒,那么平均每个小时大约慢4秒。于是我想到了一个思路,做了一个程序后台运行。每小时把时钟调快4秒。这个原理其实和闰年闰月的设计差不多。我们现在的历法就是这样通过加减天的方式缩减误差。据说1万年误差4天。最后运行下来,效果很好。其实即使有NTP的方式,其实质也是对偏差的时钟进行对时。只是我这个是我通过后台完成。然后把这个程序加到启动组防止操作系统重启后失效。
说到这里不得不提一下,在我处理好这个问题以后。当地公安在我们系统中查到了一个公安部A级通缉令的人和行车记录,从而判定了他的出逃路线。最终抓获了通缉犯,而且那次还是我查到的。如果时钟当时偏差了,就真的是大海捞针不好查了。