手机游戏巴士

12306能扛住明星出轨这种流量冲击吗?

发表于:2024-05-10 作者:游戏编辑
编辑最后更新 2024年05月10日,整理|Jane出品|AI科技大本营2019年的春运将于明天正式开启,据国务院新闻办公室18日在新闻发布会上的介绍,今年预计全国旅客发送量将达到29.9亿人次...

整理 | Jane

出品 | AI科技大本营

2019 年的春运将于明天正式开启,据国务院新闻办公室 18 日在新闻发布会上的介绍,今年预计全国旅客发送量将达到 29.9 亿人次,比去年春运增长 0.6%。最近基于各种软件、小程序的抢票大战已经如火如荼,每年最难买的就是一张春运回家的票。据 2018 年春运期间的数据统计,12306 日均页面浏览量达到 556.7 亿次,最高峰时段页面浏览量达 813.4 亿次,1 小时最高点击量 59.3 亿次,平均每秒 164.8 万次。

这两年 12306 的技术貌似有长进,不断尝试引入外部技术力量来解决问题,比如与阿里云合作,将业务放到阿里云的计算平台上,帮助 12306 平稳渡过春运的购票高峰,而 12306 系统在春运高峰期可以稳定运行,又采用了哪些具体技术?一位网友曾与大家分享过 12306 与云计算技术相容性、12306 业务与双十一业务背后面临哪些不同的技术难点等知识:

节选自:@匿名用户(阿里云程序员,某年 12306 春运项目幕后码农)

1.从技术上看,不是说做好了阿里双11就能做好 12306。个人感觉两者同属于重量级的网站业务,双十一在业务规模上更有挑战,而 12306 则在业务复杂度上更高。

2.火车票跟很多票(包括淘宝天猫的商品、机票、体育场馆门票等)有不一样的属性。比如,从北京到广州,沿途有多个站点,理论上乘客可以选择任意 一段区间购票,所以每买一张区间票,可能同时裂变出多张区间票。这个逻辑比大多数电子商务系统要复杂的多.购票差异还不仅限与此。假如说要再添加一些更人性化的feature,比如根据订票者身份证里的年龄优选上下铺、优选号等,那么查询和出票逻辑就更复杂了。

3.天量的火车票查询是影响 12306 性能的重要原因之一,大概占了 90% 以上的访问流量。更棘手的是:峰谷的查询有天壤之别,几乎没有办法在成本和并发能力之间做一个好的平衡。以往的一个做法是从几个关键入口流量控制,保障系统可用性,但是会影响用户体验。

淘宝/天猫大促的时候,也会增加服务器,阿里的业务盘子大,这些新增的机器很快会被其他业务(包括阿里云)消化掉,可能还不够。但是对于 12306 来说,就比较难做到这一点。这成为12306 与阿里云合作的一个契机:通过云的弹性和“按量付费”的计量方式,来支持巨量的查询业务,把架构中比较“重”(高消耗、低周转)的部分 放在云上。这是一个充分利用云计算弹性的绝好实例,也是在系统架构上做“轻重分离”的一个典型case,把小而精的核心业务系统保持不动,把 “傻大笨粗”(非贬义)的系统迁移到云计算上。

然而,即使有一些后端的技术支持,也有阿里云计算作为背后的基础设施,12306 还要解决高并发,分散式,缓存,负载均衡等问题,其中一个非常关键问题就是高并发情况。谈到高并发问题,就不得不提总因这个问题而崩溃的微博系统,在“鹿晗公布恋情”的时候系统没抗住,经过不懈的努力后,表示可以同时支持 8 位明星并发出轨,然而在“赵丽颖、冯绍峰官宣结婚”事件上,还是没撑住。那在春运高峰下都不会崩溃的 12306 系统,是不是坑得住这种流量冲击呢?

近日,关于这个话题大家在知乎上也展开了热烈的讨论:

先列举几个【可以支持、扛得住】方的观点:

@那位先生:首先我们需要知道的是,一张火车票的售出不仅仅只是把这张火车票对应的座位状态标记为已售出,其中还可能会影响到该车次其他路程段的售票状态。对于微博这类数据传播显然是没有售票复杂的。然后我们再看一组官方数据:从2018年12月30日开始,12306网站开始预售,农历腊月廿三(小年)的车票,春运售票渐入高峰,至2019 年1月4日,达到第一轮高峰峰值,日页面浏览量(PV)达 1310.6 亿次,全天发售车票 1282 万张。

@李国宝:回顾 12306 互联网售票系统的发展,高峰售票量由 2012 年春运的 119 万张 / 天,增至 2013 年春运的 364 万张 / 天,系统架构的优化与调整起到了至关重要的作用。2014 和 2015 年春运售票量再次超过 500 万和 600 万,最高达到 636 万 / 天,验证了二次优化后架构的合理性和有效性。 12306 互联网售票系统在优化架构的同时,还在核心业务中用低成本的 X86 平台全面替代了原有的小型机平台,其架构优化实践对同类大规模并发访问的网上交易系统具有重要的借鉴意义。

@霜公子:以技术水平来看优化后的12306 是有技术实力抗住明星出轨的,然而显然业务场景差距很大。12306的难点更多高并发下事务处理,写和读的一致性等等,但是车票的放票高峰是可以分时段分流并且可大概估计的,在春运、十一等假期重点优化加资源。明星出轨其实更多的只是一个高并发读的场景 ,也许都比不上某条春运热门线路的查询刷屏请求量高,但是什么时候出轨什么时候被报出来 是没法预估的。如何保证资源不浪费的情况下又能抗住瞬时的大量请求是很难解决的。

下面是几个【技术角度】的分析观点:

@猪了个去:两者涉及的难点不一样。12306系统中涉及的是海量事务的高并发,明星出轨是比较单纯的读流量比较大。场景就比这个简单多了,按照过去 n 次的故障,都是程序猿不怎么小心,或者是加的机器不够造成的。明星出轨要么是热搜挂了:热搜是多么美好的一个热点应用啊,都基本是一个关键词,关键入口引导往固定的搜索词,然后加缓存机器就好了,流量不要落到后面的搜索引擎就行。要么是评论挂了,要么是转发挂了:那几千万评论说多是多,但实际上没几个人会无聊得把这些评论看个遍,也没人在乎到底谁比谁评论得早,顺序乱一点都没太大关系。最难的属于时间线的维护,几千万转发意味着有几千万条动态被发出去了,也意味着写流量大增。不过比 12306 好的一点是:没有事务就好说,不会产生冲突。

@懂二进制的十:普通人都太小看 12306 的负载能力了,其实 12306 的研发可以称得上是镇国级的黑科技。举个例子北京到深圳有 24 站,当买下这一张车票时,库存得去除 24 23 ……2 1=300 张票。2018 年春运全国旅客发送量约 29.8 亿人次,平均每天约 1 亿人次(经评论区指正,这是总客流量,铁路发客量不到 4 亿人次)。跟这个数字比较起来微博百万乃至千万级的阅读量简直就是弟弟,更不要说春运售票是高并发事件,要求写和读一致,而微博更偏重于高并发的读,虽然流量爆炸,但没有产生事务。大家之所以会产生微博很容易宕机的错觉大概是因为明星出轨是一个不可预测事件,完全无法预先做好准备,而像卓伟这样喜欢留一句“周一见”的预告型爆料就十分方便提前加服务器。

@Arthur Guo:抛开场景来谈技术不怎么靠谱,好多还扯到了架构,这个分明是两个场景问题。12306/双11,是如何应对瞬时流量的问题,这个考验的上限;微博,是如何应对突发流量的问题,这个考验的是灵活度,所谓的动态扩容,有经验的同学可能还会知道,峰值只有很短的时间,有的时候扩容完了,流量就下去了。理论上来说,微博峰值的流量肯定不如淘宝和 12306,并且淘宝和 12306 还有更多的是写,但是如果淘宝不知道哪天是双十一的零点,一年 365X24X60X60 每一秒都可能是双十一的零点……这个就是突发流量和能提前准备的流量应对的不同,不过一切问题本质都是经济问题,突发流量面临的问题就是,平时流量带来的经济价值在保证利润的前提下,能够常备多少机器。

如果不从技术角度,从【用户体验角度】出发或【搞笑风格】的回答:

@狗子你变了:明星你随便出轨,只要我火车不出轨就就行了。

@lou:你是不是小看春运了。

@大熊:看到这个问题,我突然想起了前几天听罗振宇的演讲《时间的朋友》。记得里面说起春晚的广告,天猫中了标,把服务器扩展到了双十一巅峰时的四倍,结果春晚当天还是挂了。后来发现春晚当天的访问量是双十一峰值的十六倍······事实证明,双十一或者玩微博的人群,仍然只是一小部分,12306 的负载能力远比你想像的大得多。你们对人民群众的力量一无所知······

@王听玄:对于一般的流行网站来说,明星出轨的流量叫做冲击。对于 12306 来说,明星出轨的流量叫做一个普通的星期二。

@灬蓝灬天灬:哪个明星出轨的流量大过春运?

(以上回答均来源于知乎用户)

营长也咨询了几个技术朋友和作者,真要比较,不是简单一两句就能一概而论的,涉及的专业知识也很多,数据库、缓存、网络、分散式队列、CPU 等等,单从高并发情况来说,12306 和 微博也是不同的,微博的高并发是读,12306 是读和写,所以应对的问题场景不同,仍需要针对应用场景做具体分析与优化。

引用链接:

https://www.zhihu.com/question/27321479/answer/37292320

https://www.zhihu.com/question/308463476

https://www.zhihu.com/question/308463476/answer/569452666

https://www.zhihu.com/question/308463476/answer/569462672

https://www.zhihu.com/question/308463476/answer/571102424

https://www.zhihu.com/question/308463476/answer/571489896

https://www.zhihu.com/question/308463476/answer/570655216

--【完】--





0