搜索
热搜: 活动 交友 discuz
查看: 8488|回复: 20
收起左侧

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

[复制链接]
  • TA的每日心情
    奋斗
    2019-1-5 01:55
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2013-9-17 12:45:45 | 显示全部楼层 |阅读模式
    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在给自己挖坑呢。
  • TA的每日心情

    2014-1-10 19:40
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2013-9-17 13:10:34 | 显示全部楼层
    我就知道查询一次票,现在是2次request了。;P
  • TA的每日心情
    慵懒
    2014-12-24 08:53
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2013-9-17 13:11:06 | 显示全部楼层
    唉。。。心都碎鸟~~~~~~
  • TA的每日心情

    1389354026
  • 签到天数: 2 天

    发表于 2013-9-17 13:13:07 | 显示全部楼层
    垄断行业, 没办法, 真希望大家都不去买, 哪怕只有一天, 他就疯了..

    该用户从未签到

    发表于 2013-9-17 13:20:01 | 显示全部楼层
    不要个死脸的铁道部这是要干啥?

    该用户从未签到

    发表于 2013-9-17 13:22:20 | 显示全部楼层
    IE整点也被退了。。。真是无语了哎。:Q

    该用户从未签到

    发表于 2013-9-17 13:22:48 | 显示全部楼层
    不止网络订票,电话订票系统都各种问题,很难走完整个过程,还以为他们服务器中病毒了呢,原来是自己在挖坑玩

    该用户从未签到

    发表于 2013-9-17 13:46:00 | 显示全部楼层
    我感觉他们就是不想让咱们买到票,都买到票了谁还去找他们的黄牛买票啊.没人找他们的黄牛买票,相应的自己的奖金福利肯定就受到影响了,他们是自己的利益受到威胁了,才这么搞的
  • TA的每日心情
    擦汗
    2014-1-2 10:23
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2013-9-17 13:47:24 | 显示全部楼层
    铁道部坑自己。。。
  • TA的每日心情
    擦汗
    2014-9-11 11:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2013-9-17 15:16:44 | 显示全部楼层
    这就是GCD领导的方式啊,自欺欺人呗……
    您需要登录后才可以回帖 登录 | 入住

    本版积分规则

    申请友链| Archiver| 手机版| 鱼·后花园

    GMT+8, 2024-11-23 16:09 , Processed in 0.029653 second(s), 19 queries , Redis On.

    Powered by Discuz! X3.4

    © 2005-2024 鱼·后花园

    快速回复 返回顶部 返回列表