一年一度的“双十一”预热很久,想必很多人都和我一样做了很多功课,决定要抢半价。然而,我从第一年就开始努力“秒杀”,到现在为止都没有成功过。
但幸运的是,我来到了国家授时中心这个拥有神秘力量的研究所。在这里,我寻找到时间与空间的终极秘密,终于知道问题究竟出在了什么地方,那就是:时间不同步。
当我还在上小学时,已知的唯一对表途径就是早上准点的电台节目播出。当我上了大学后,我就没再给手机对过表。
这是为什么?因为我们的网络建设逐步完善,生活中各种便携电子设备开始普遍采用更加先进的授时方式。
我们从手机上获取的时间为当地标准时间。以中国境内为例,手机上自动显示的时间是北京时间。我们还在用诺基亚的时候,时间是怎么来的?大部分都是用户手动设置,依靠手机内部的晶振来提供时间标准。但是这个时间标准的稳定性不高,经常会出现一天几秒的误差。
还有一种方式是通过NTP服务(互联网服务)获得。互联网服务是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源,如石英钟,GPS等等做同步化,提供高精准度的时间校正。
但是,最小只有几十毫秒的误差难道会让我秒杀失败吗?答案是:会的!这是为什么?就要从互联网的工作原理说起。
互联网协议的精确对时,主要是在主从工作方式下实现的。互联网算法首先要根据服务器和客户端的往返报文来确定两地时钟的差值和报文在网络中传输的延迟。
举一个简单粗暴的例子,假如11月10日的深夜,你在珠峰上瑟瑟发抖准备抢半价,这个时候你和淘宝服务器的时差为10分钟,我们以淘宝的服务器的时间线为时间标准,并认为淘宝的服务器可以给我们提供网络授时服务。
在10日晚上的23:20开始紧张刷手机,为“双十一”做最后的准备。当我们点击一个宝贝后,就触发了一次校准。消息由我的“小鸽子”送给淘宝的服务器。它需要5分钟的时间飞到那里,我们将这段时间称为t1。手机和淘宝的时差为10分钟,最后“小鸽子”在23:25时(淘宝时间)到达。
淘宝的服务器接收到了“小鸽子”的信息,迅速处理,于23:25让“小鸽子”把回信送给我。“小鸽子”比较调皮,在回来的过程中停了1分钟看风景(不可知的延迟),再加上10分钟的时差,到达时我的手机是23:36:30(后面分析将忽略秒)。我们将5分钟+1分钟的这段时间称为t2,同时,根据收到的NTP回信对本地时间进行校准。
可以看到,此时,我和淘宝服务器的时差变为了11分钟。这是因为路径不对称,且路径延迟很大造成的。如果我们往返都只需要1分钟的话,那么时差就会变为4分钟。
现实生活中的时差不会这么大,所以校正的结果是很难察觉的。
等到23:59,狂点结算!小鸽子飞了5分钟,堵在“双十一”的路上排队用了2分钟,最后到达淘宝的时候是0:17(淘宝时间)。
淘宝收到了我的消息,处理后发现已经没有名额,将这一结果返回给我。我的小鸽子飞了6分钟,到达时间为0:18:30(本地时间)。同时再次触发一次时间校准,校准后的时差为5分钟(忽略秒)。我们可以看到时差在逐渐减小,如果多进行几次通信,那么时差可能会越来越小。
延迟可能会迟到,但从不会缺席。总而言之,是因为手机端、电脑端、服务器端的时间不同步,让我们抢不到半价商品。不过,多刷新多同步总是没错的。
(作者单位:中国科学院国家授时中心)