您的位置:首页 > 运维架构 > 网站架构

简述12306网站春运抢票插件的工作原理

2013-02-03 13:37 337 查看
  好久没有自己写日志了啊,先说明一下,这篇文章也并非完全原创,事先是有专门查找过相关技术文档的,毕竟菜鸟水平有限(这也是菜鸟一直自称“菜鸟”的原因)。因为就快要过年了,而公司一个ERP需要在年前推出来,所以这段时间公司研发部几乎天天都在加班赶项目,今天我也是忙里偷闲才写得这个文章。
 

  春节临近,近来最火的话题无疑要数春运了,作为一种“中国特色”,春运问题已经存在很多年了,每年此时,出门在外的游子们几乎使出浑身解数就为一张回家的车票,而今年,各种各样的抢票插件也因此在网络上大肆活跃流行起来,甚至很多浏览器厂商都在此时推出了自己的抢票插件,不少用户欣然使用,并也借此顺利买到了的难得的车票。但一系列问题随之而来:抢票插件真得能抢到票?它到底是不是恶意攻击软件?用户使用抢票插件买票算不算是“加塞儿”的行为呢?抢票插件该不该被取缔呢?

  在搞清这些问题之前,先来简单介绍一下什么是抢票插件:所谓抢票插件,就是一个运行在浏览器上(当然也可运行于其他平台之上),帮助用户完成在12306网站上‘抢火车票’功能的软件;再来简单解释一下抢票插件的工作原理,明白了它的工作原理,上面的疑问自然也就解开了。

  先抛开插件、攻击、浏览器这些互联网专业词汇,通俗地举一个我们日常生活中的小例子:

  话说有一家卖时光机的商店生意火爆,顾客人满为患,但即便是这样,该商店也只有一个收银台,而且在这家商店里,对于任何一种款型的时光机,都只有某一特定的数量,售完则止;再者该商店还有这样一个规定:在你顺利选中某款中意的时光机并且要为此付费的时候,如果商店收银台有人正在付费,那么你就必须放下该商品并且立刻离开商店(一秒钟也不能停留),出去溜达回家吃饭都行,总之必须离开,离开时间长短也无所谓。等到你再次回来时,你需要再次选商品并再次付费,但是如果这次收银台还是有人,那你就还要继续放下商品,继续离开,这样一直循环下去,直到某次你回来的时候正好选中商品并且收银台也是空余的。

  从这里大家可以很清楚的看到,这个垃圾规定的要命之处有两个,第一:每款时光机的数量都是有限的,而需要的人又有很多,我不一定能够在众多顾客的争抢中拿到我中意的那款时光机;第二:有可能在我付费的时候收银台有人,而我离开的这段时间里商店的收银台却没人的,只是不巧当我再次回来的那一瞬间收银台又有了人,于是我又得放弃并离开,如果一个人很倒霉,每次他来的时候都有人,走了就没人,那么他想付费成功就需要来来回回走很多次很多次,这样就会浪费很长的时间和精力。

  作为顾客,我们没办法左右这家可恶商店的垃圾规定,只能背后在微博上吐糟一下,至于上述第一点,每款时光机数量有限而顾客无限(相比于时光机数量而言),所以顾客抢商品就再所难免了;从技术角度看,顾客自己可控的操作更多的体现在第二点上,这里重点讲第二点:为了解决第二点所指的问题,通常最简单的方法就是我们尽可能缩短出去溜达的时间,就是说当每一次我们选中商品却付费失败离开之后,我们过很短的时间就回来看一次,即过很短的时间就再去收银台看看是否有人,如果没人,就立即付费,免得错失机会,显然,这么做很麻烦效果却不见得有多好,而且更像是在浪费生命。

  这时有个聪明人站了出来,他发明了一个机器人,在你出去溜达的时候,他可以按照你事先设定的频率,每隔几秒钟就去替你看看有没有人在收银台付费,一旦发现没人就立刻打电话叫你:“快来,收银台空余,可以付费了!”这样我们就可以放心的去看电影、吃饭、打游戏了,一旦收到机器人的电话就立马飞奔回去付费。

  看到这里,我相信大家都知道了,时光机就是火车票,而12306网站就是那家无良心又恶心的商店,一旦用户的购票请求提交失败,用户就必须放弃本次请求,再重新发起另一次购票请求(与之前那次属于两次不同的请求)。对于互联网操作来说,重新发起购票请求就相当于“出去溜达溜达再回来”。抢票插件就是那个机器人,在你出去溜达的时间里替你向12306提交购买请求。根据事前的设定,抢票插件会每隔10秒(也可以是5秒3秒)就向12306发起一次请求,一旦抢票插件发现“时光机”有余货并且“收银台”没人,他就会向你发出通知,以音乐或者弹出框的形式告诉你:“有票啦,赶紧来买票吧”。所以,有了抢票插件替你“值班”,你就可以放心地去刷刷微博,看看电影,或者写写年终总结了。

  可见,从这个角度来讲,抢票插件是一款很不错的产品,它帮助我们克服12306本身的技术缺陷,更快捷、更简单也更方便地买到回家的车票;使用抢票插件也不是“加塞儿”的行为,他不是把后来的人提到前面,而是让本来就排在前面的人不要错失在前面就能成功付费(成功买票)的机会。

  正如凡事都有两面性一样,抢票插件也有它不好的一面。大家可以想见,12306网站之所以难登录,响应慢,一方面是因为12306网站本身的问题,但是更多的是因为12306网站访问的人数实在过多,这一点从咱们国家春运庞大的人流基数和各个车站的拥挤程度就能知道,12306网站的服务器经受不住如此巨大的访问和请求压力。而抢票插件每隔10秒(甚至5秒3秒)就向它提交一次购票请求,这远远高于一个普通实体自然人正常的访问频率,这就进一步加剧了12306网站服务器的承载压力,导致了“越慢越抢越抢越慢”的恶性循环状况的出现。

  在网络安全领域,有一种黑客攻击手段被称为DDOS(Distributed Denial of Service,分布式拒绝服务)攻击,这是一种最原始、最暴力、最没有技术含量但是很多时候却最有效的攻击手段,其原理是通过控制多台电脑(通常是几万到几十万台)对某一个网站服务器密集的发起访问(访问压力可以达到每秒数百万到数千万次),造成该服务器对其他正常请求响应缓慢甚至宕机(瘫痪)的情况。

  如果把抢票插件的刷票频率设置的极端化,也会达到和DDOS攻击相类似的效果。例如抢票插件的访问时间间隔不是10秒,而是0.1秒,也就是每个抢票插件每秒钟向服务器提交10次请求;再假设全国有100万人(高峰时段远不止这个数字)在同时使用抢票插件。那么简单计算一下可知,抢票插件将会对12306网站的服务器造成每秒高达1000万次的请求压力。这个数值是庞大的,而真实的数据在某些高峰时段往往比这个更大,对于当下IT界绝大部分网站的服务器而言,每秒千万次级别的请求压力都是极端恐怖的。

  但是抢票插件与DDOS还是有很大区别的:

  1.抢票插件虽然客观上加大了12306网站的访问及请求压力,但是主观上还是为了帮助用户快速买到车票。这与DDOS攻击就是了让被攻击网站的服务器宕机的目的是有本质不同的,DDOS攻击是恶意的(通常只有黑客才会使用)。

  2.抢票插件是用户主动(或同意)安装到自己电脑上的,并且启用抢票插件对12306的访问行为也是用户主动发起的,同时只要他愿意,可以随时终止抢票插件的访问行为。而DDOS攻击的发起者通常都是事先通过隐秘的手段侵入他人电脑(黑客专业术语叫肉鸡),再通过控制肉鸡对某网站发动攻击。在整个攻击过程中,肉鸡的主人既不能决定何时开始攻击,也不能决定何时终止攻击,甚至很多都不知道自己的电脑已经成为了黑客们的肉鸡。

  3.抢票插件在用户与用户之间是相互独立的,访问行为都是用户自发的,之所以出现大量用户同时使用抢票插件完全是因为春节临近大量游子买票返乡心切以及国家铁道部的售票政策方案本身存在很大的缺陷;而DDOS攻击是有计划有组织的,攻击发起人有意控制大量肉鸡同时向目标网站发起的攻击。

  所以可以总结:抢票插件会对12306网站造成巨大的访问请求压力,但它并不是12306网站的恶意攻击软件。

  解决抢票插件使用泛滥最根本的方法,就是优化铁道部的售票方案和提高12306网站的技术水平。第一,在重大节假日前后应当临时提升服务器抗压能力。第二,提高网站制作水平,降低不必要的访问压力和带宽占用,阻止恶意访问。第三,为用户提交的购票请求建立队列(数据结构的一种),即先来后到,排队购票。

  最后顺便多说一句,菜鸟友善提醒各位:现在互联网上流行的抢票插件,很多都带有后门程序,特别是那些不明来路的产品,望广大游子务必提高警惕,能不用最好别用,以免被那些后门程序盗走了网银或银行卡的账号与密码。真心希望童鞋们都能成功购票,安全返乡,幸福过年(其实菜鸟明白,这比维护世界和平还要困难,囧~~)。

注:本文取自博主QQ空间日志
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  12306 春运 抢票插件