本鱼拟成立工作室承接项目开发/软件定制/云设施开发运维/办公设备技术支持等,如您有相关需求,欢迎来询 | ::博客文章推荐::

从服务器请求来看17日12306的强退

: WEB前端 木魚 3181℃ 3评论
 17日12306出现了各种强退,尤其是整点附近的时候,包括很多人用IE都被强退,除此以外还有很多人直接显示了拒绝访问。目前认为是12306的原因。但为什么会这样呢,让我们从最开始说起吧。


1.订票助手在春运
春运的时候12306在用各种手段阻止使用,理由是会导致服务器压力上升。对此我始终无法认同,原因如下:

  • 助手遵循的是最低五秒的查询策略,不会频繁。在正常情况下,如果你不用助手,你也会不断地刷新个不停,而不会说我就等着差不多有票了才刷(你无法估计什么时候有票)
  • 助手不会额外发出什么请求(除了加载联系人,但助手加入了缓存,只会访问一次。相对来说订单页的每次提交还都会访问)
  • 助手的任何操作都遵循间隔的策略,不会连续发出大量请求,甚至为了降低服务器的压力有些刻意的设置
  • 助手的功能设计目标都是为了提高便捷性和丰富功能,而不是为了让操作更加频繁



好吧,就算你认为自动的每隔五秒刷票也会比人手动点的效率更高,假定这项推断成立,那么国庆时发生的事情,就比较搞笑了。

2.梳理一下正常情况下订票需要的请求数目
假定在国庆前买票、始终有票、不需要重试,那么需要如下请求(假定所有静态资源都由CDN提供不需要12306本身的服务器)。

  • 打开12306订票
  • 打开登录页
  • 加载验证码
  • 点击登录->加载登录随机码
  • 发送登录请求
  • 进入查票界面
  • 查票
  • 点击预定按钮进行预订
  • 进入订票页面
  • 加载联系人
  • 加载验证码
  • 检查订单
  • 检查排队信息
  • 提交订单
  • 检查排队
  • 订票成功



由以上可见,正常情况下一次完整的订票在没有任何重试的情况下,需要有16个请求方能完成订票。那么假定一天售出100万张票,那么12306的服务器(不是CDN)将需要承受1600万的请求。但现实中,往往买到一张票需要经过多次反复刷新才能买到,假定以高峰期的刷新40次、提交五次才能买到一张票的话,那么上述请求将会放大至上亿次。
而订票助手(包括抢票王)在整个购票群体中其实占的比例没有那么大(至少不会全部覆盖),在就算不用助手也会手动刷新的前提下,服务器压力不会因为助手的使用增加到多少。

3.国庆的时候,12306干嘛了?【上篇】
在国庆的时候,12306终于决定出来封杀助手了。与之前春节是修改流程等方式不同,这次使用的是基于客户端检测的技术。相关初期的检测可以参见『2013.911-9.12 12306检测技术浅析』。
那么再梳理一下请求,看看到底发生啥变化了。

  • 打开12306订票
  • 打开登录页
  • 加载动态的检测脚本
  • 发送初始化响应(不一定会有)
  • 发送检测响应(在检测到助手或抢票王后发送)
  • 加载验证码
  • 点击登录->加载登录随机码
  • 发送登录请求
  • 进入查询页
  • 加载动态的检测脚本
  • 发送初始化响应(不一定有)
  • 发送检测响应(在检测到助手或抢票王后发送)
  • 查票
  • 点击预定按钮进行预订
  • 进入订票页面
  • 加载动态的检测脚本
  • 发送初始化响应(不一定有)
  • 发送检测响应(在检测到助手或抢票王后发送)
  • 加载联系人
  • 加载验证码
  • 检查订单
  • 检查排队信息
  • 提交订单
  • 检查排队
  • 订票成功



以上红字标出的是新增的请求。由此可见,相对于原先的16个请求,新的模式将会导致请求数上升至20~25个,上升了25%-70%。
可怕的是什么?可怕的是助手只是小部分群体,而这样的响应增加却是所有的订票用户都会遭遇的。
12306,在这样给自己找事儿之前,有没有先把服务器扩容好?你不是指责助手的刷新给你的服务器制造压力了吗?那为啥你还在给自己制造难以预期的压力

4.国庆的时候,12306干嘛了?【下篇】
未完待续。12306在16日的时候又增加了一个请求,主要是分拆了上面的第13个请求,变成俩请求,并且在点击查询的时候同时发出。
如果说上面的这个我勉强可以理解目的,那么这个完全给自己找不自在的点子就完全理解不了了。

因为这个变更实在太难以预计影响了。直接用数据来模拟一下吧。
假定平均刷新40次(查40次票)才能查到票(事实高峰期会更高),而全国每天100万人在12306上购票。撇去所有其它的请求,原本需要100W*40=4000W请求才能将这些查询全部搞定。
而现在这种策略一改后,则压力立刻翻番,需要至少 40*100W*2=8000W请求才能全部搞定。
这种给自己压力翻番的游戏,不知道是怎么敢玩的。就算有CDN在前面为你扛着,这种压力也不是不思考就直接加的。
所以很多人刷新几次后发现CDN服务器直接说拒绝访问了,因为在这种模式下,原本的五秒刷新会被缩短(因为是俩请求,相当于每2.5秒发送一个请求),所以多刷几次后,CDN先对你说NO了。

以上面的为例,假定平时需要25+40=65次请求才能买到票,那么这么处理后铁道部服务器承受的压力将是 25+40*2=105次请求。压力到底是谁带来的,不言而喻。

5.你到底是想做什么?
指责别人给你带来压力,恐怕只是个幌子。因为你没有事实证据证明流量是别人带来的。
而你自己增加的请求,却是实实在在的、并且任何访问你的人都会带来的。

所以能理解为什么各种强退、CDN拒绝访问、登录卡住了吧。因为12306在给自己挖坑呢。

本日志备份自 QQ 空间,原文地址:http://user.qzone.qq.com/286495995/blog/1379393225

喜欢 (1)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 回家只是一个简单的心愿。

    2013-09-19 03:04 回复
  2. 都不去买票,让它亏。它外债达资产百分六七十,估计快了

    安静2013-09-17 05:49 回复
  3. 州官自点火,百姓难点灯

    張雲楊2013-09-17 02:12 回复