跟这个BUG相比,拼多多损失的200亿真不算什么

发表于:2019-1-21 10:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:好人长安君    来源:今日头条

  发生在1月20日凌晨至早间的“拼多多被薅羊毛”事件已经过去了一天,据说因为系统BUG,导致拼多多平台上出现了不限量的零门槛100元优惠券(零门槛就是不管消费多少都可以使用优惠券抵消现金),而且是免费领取。
  在长达八个小时(据说凌晨一点bug出现,直到拼多多九点半上班才关闭了口子)的全网薅羊毛中,拼多多共计损失超过200亿,有不少用户薅羊毛数额上万,甚至有团伙进行技术操作,薅羊毛金额达到数百万,更不要说数量庞大的普通用户。据拼多多官方发布的声明称,此次损失达到千万级别。
  临近过年,网友都笑称拼多多给全民发红包,并且很多上班族睡醒之后都后悔的不行,比如笔者自己,感觉一觉错过了两百亿。
  对于这一事件的前因后果以及过程,笔者就不再细说,网上有的是议论。
  身边的朋友都笑言,这可能是史上价格最昂贵的电脑BUG。
  但我想说,不,跟我接下来要说的BUG相比,拼多多系统BUG造成的损失简直是毛毛雨。
  这个电脑BUG已经发生了很长时间,而且同样是系统BUG,但它造成了遍布全世界的一场互联网灾难,同时造成经济损失超过5000亿元。
  我要说的就是千年虫。
 
  千年虫,缩写为Y2K
  千年虫不是病毒,而是BUG
  2000年时笔者还在读小学,电脑还没摸过,自然也不知道千年虫,只知道周星驰电影里提到过,并且很长一段时间里都认为它是一种电脑病毒。
  直到高中上网,无意中看到一篇科普,才知道,哦,原来它只是一个不起眼的BUG。
  千年虫的BUG并不是在世纪末诞生,而要追溯到二十世纪六十年代。那时候的电脑系统、软件以及所有的插入式驱动,编码中表示日期的数字都是两位数(可能是出于节省存储空间的考虑),比如说1989年,就用“89”来表示,1999年就用数字“99”来表示,然后2000年就用数字“00”来表示……等等,问题就出在这里。
  “00”在最初的设定中并没有明确设定表示2000年,而在基础指令中,几乎的“00”表示的是1900年。
  那么问题就来了,1999年12月31日过后,这些使用60年代编码技术的电脑系统、软件和插入式驱动会将时间轴调回到1900年。
  而这个时间的跳转将会引发一场席卷整个互联网的灾难——因为这些电脑会默认删除失效的或者不存在的文件,这将导致电脑系统的瘫痪。
  我想大家都能意识到这个BUG的可怕,届时很多存储有重要数据的电脑都将面临数据丢失的风险。
  
  当时报纸的报道
  当时的事态有多严重呢?
  首先涉及到的会出问题的硬件和软件数量庞大,应用广泛:
  一个是配备比较早的主机上的应用系统,如在IBM 4381,IBM AS/400等机型上运行的应用程序。这些机器系统国际上都应用的相当早,因此其上面的应用程序经过十余年的开发和发展其规模已经非常庞大,比如美国的AT&T电讯公司,其内部就有超过3.6亿行的应用程序需要检测是否存在2000年问题,这确实是很大的工作量,因此给解决2000年问题造成了极大的麻烦。
  另外一个是嵌入式设备。所谓嵌入式设备,就是指设备中使用了智能芯片的系统,由于智能芯片价格低廉,嵌入式设备已变成无处不在,由生产线、大量的自动化仪器仪表、汽车、电梯、警报系统、消防检测器到医疗设备,以至电话交换机、空调机、交通灯、恒温器等,可谓渗透到日常生活每个角落。这些设备中应用的程序往往都已经固化到元器件中,因此一旦产品只使用了两位数来表示年份,就会引发2000年问题,而要替换这些芯片,又往往不得不把整个系统都替换,这会造成资金和操作上的困难,使解决2000年问题更加麻烦,也是无法按时解决2000年问题的隐患之一。
  其次是涉及的行业极其广泛,并且这些行业十分重要。
  涉及到的行业包括但不限于金融业、保险业、电信业、电力系统、税务系统、医药业、交通系统等等。
  举一个简单例子,美国夏威夷电力公司曾经做了一项实际的实验,输入00年,结果电厂自动停止操作,在某些情况下也发生电压与频率方面的变化,造成用户全面停电、电器故障甚至烧毁;美国联邦核管处更是担心全美的百余座核电厂里的仪器由于2000年问题失控造成核辐射外泄等灾难。
  然后是在全球多个国家受到影响。
  这几乎是必然的事情,亚洲、非洲、美洲、欧洲统统中招,只要哪个国家还在使用有类似BUG的电脑系统的硬件,那么都无法逃脱它的影响。
  后来进行了大量的补救工作,其实说白了就是将电脑运行环境中的所有的“00”修改成四位数字“2000”,这里面自然耗费了许多时间和精力。
  即便如此,在2000年过去后,在绝大多数人都认为消灭了千年虫问题后,千年虫依然肆虐了整个互联网世界,并造成了许多损失。
  有统计公司对千年虫这个世纪BUG所造成的影响和损失做过统计,自千年虫危机爆发前的五年到爆发后的五年,这十年之间因为千年虫BUG造成的损失不低于5000亿。
  BUG可以消除吗?
  当然可以。
  BUG的产生有一些不能归咎于程序员,因为程序员大多数时候都是执行者。有一些BUG都是在当前环境下运行良好,直到出现程序员当初设计指令时意想不到的情况发生,原本没问题的指令会瞬间成为危害系统安全运行的杀手。这就是许多BUG的产生过程。
  当然,拼多多的BUG却很可能是技术团队的疏忽造成,与千年虫的成因存在很大不同。
  如果在IBM早期的电脑推出时便有人能够预测计算机的未来,那么我相信千年虫问题根本就不会存在,但这种预测是超过程序员能力范畴的事情。
  BUG就像山火,不管后果如何,火总会灭的,只是这场火带走的损失我们无法控制。
  最后想说的是,除了千年虫,还有一个更厉害的BUG等在2038年
  和21世纪初的千年虫(the Millennium bug)问题类似,也出在时间上。
  这就是32位的Unix操作系统和Linux操作系统(一般这俩系统深受程序员的欢迎)时间溢出问题,又被称为2038年问题。
  这个bug是由用来写Unix/Linux的C语言引起的,C语言中用 time_t 来代表时间和日期,time_t 是整数(int)型的,它用来记载从1970年1月1日到2000年所经历的秒数。
  这个数据是以32位存储的,第一位是符号位,其余的31位用来存数字,而这31位数字可以存储的最大数字为2147483647(2的31次方)。
  从1970年开始计算,这31位的数字可以表示的秒数最多可以用到2038年01月19日03时14分07秒,当时间到达这个数字的时候系统将会出现问题,到时候数字不会自动增加,而是会变为-2147483647,而这串数字代表的时间是1901年12月13日20时45分52秒,这会导致很多的程序出现跟千年虫问题一样的麻烦,甚至造成系统崩溃。
  2038年问题不仅比千年虫更隐蔽,而且比之前千年虫问题更具有破坏力,因为千年虫问题只会导致应用层的程序出现问题,比如信用卡支付系统,或者管理系统。
  而2038这个bug,将会影响系统最底层的时间控制功能。
  要解决这个问题,最简单的方式是扩展Unix时间的长度,用64位数字来表示它。64位二进制数的实际可用位数是63位,最大表示到公历的UTC时间292,277,026,596年12月4日15时30分08秒。如果那个时候人类文明还存在的话,公元纪年很可能已经因为太难用而被抛弃了。
  理想的情况是到2038年,64位系统已经成为主流,完成对32位系统的替换,从而避免特意去修正这个问题所需要的大量开销。
  可能有人会说这也只是Unix操作系统和Linux操作系统的问题,如今个人和机构大量使用的电脑基本上用的是Windows苹果系统,所以影响有限。这是一种认识上的错误,以上两种系统可以说是Windows和MacOS的底层系统之一,所以即便经过深度改造的两大系统解决了时间问题(Windows的时间问题会出现在公元2116年,苹果电脑系统的时间问题则出现在公元29940年),但仍然会影响到绝大多数的硬件设备和软件应用。
  举个很简单的例子,如今很多浏览器用的依然是LINUX内核。
  
  不管怎么说,只要互联网世界存在一天,人类文明存在一天,那么BUG也将永存。世界上没有完美的系统,如果哪一天不再有BUG,那很可能意味着人类文明的终点。
  不过还是默念一下程序员的座右铭吧:佛祖保佑,永无BUG。

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号