12306 Why should collapse from time to time so what?

Author | semi-immortal Buddha

This article is reprinted with permission from fairy JUMP (ID: xrtiaotiao)

The upcoming Spring Festival, the Chinese New Year train ticket home, you buy it?

I know many of you do not buy, I can feel your heart despair.

A few days before the collapse of the 12306, 12306 scolding a lot of people, there are a lot of people ask me why the numbers in the background 12306 public always quick to collapse, and aunt as not to force.

Obviously just a simple ticketing software, how this mess ghosts, people QQ micro-channel hundreds of millions of people simultaneously online chat, passion interaction.

The other side of the double eleven hundreds of millions of people at shopping madness Prodigal chop hands are not the problem, why 12306 a shot, wearing pants is fried user experience?

Let the hard core of Buddhist teacher to give you half what science.

12306 in the end how much business is facing pressures and challenges.

So many of you surrounded them, they certainly can not stand, who can bear it.

Although there will be a lot of technical terms used in this article very hard core, but I would say as simple as possible, we must carefully listen, take notes, the New Year at the dinner table when bragging, this is the king of fried, do not thank me .

Not that you read this article will be able to buy a ticket, buy a ticket is actually a metaphysics.

Just say, can "die" understand the point.

Many people take two-eleven 12306 and to compare that two-eleven so many orders can shore, barely holding 12306, apparently because technology is not in place.

The start left detour friends, business model and 12306 double eleven are essentially different.

This difference, has led to the difficulty of 12306 than double XI and more and more a lot more ~

If the difficulty is two-eleven human mode, the 12306 is almost the equivalent of eighteen layers of hell, the difficulty still have to dig a hole.

First, the flow of two-eleven is bigger, it is only pure online business , what is a pure online business? All users are on the page or APP orders, the entire data is actually closed loop.

This leads to two-eleven is just a pure online traffic problem to solve relatively pure, like a simple bullied as children.

Rather than 12306, 12306 is not only a site of APP and friends, ticket office and at-line transaction arising under the machine for all online data system will also affect the whole of 12306.

实际上现实生活中非常多的买火车票返乡的人,例如辛苦的农民和工人朋友,很多都是不会线上操作的,他们只会线下彻夜排队,非常辛苦,所以12306也必须照顾他们的感受,不能断掉线下业务。

这就导致了12306本身是一个线下与线上同享数据的复杂业务,复杂度要高出双十一一个数量级的。

和纯粹简单的双十一相比,12306就像一个饱经社会摧残的老油条,你永远不知道他们会什么时候会出现什么幺蛾子。

这就像一个纯洁男孩第一次和他的男朋友约会,怕他不来,又怕他乱来。

第二,抛开线上线下不说,毕竟这是欺负12306,我们谈谈业务本身的计划性和可预测性。

如果认真思考,你会发现,双十一是一个有明确计划和操作节点的业务,而12306不是。

双十一活动并不是只有11月11号当天,其实是一个月前甚至几个月前就已经开始了,大量的用户都已经支付了定金,大量的商家也已经锁定了库存和销售额,只不过最终的结算是在11月11号当天进行的而已。

这就代表着,双十一面对的是一个高确定性的任务,只要有确定性,流量再大也不是特别难的问题。

当你知道困难会在什么时候发生的时候,这个困难就不再困难了。

真正的困难,在于不可知。

什么叫不可知?12306就是不可知。

因为你永远不可能测算出会有多少人在哪一天去哪一个地方,一个从浙江回山东的人,他为了回家,选择的线路和时间会非常诡异多变。

他可以买浙江到山东,可以买浙江到上海到山东,可以买浙江到南京到山东,可以买千岛湖到山东,可以买浙江到北京到山东,可以买浙江到黑龙江到山东,甚至可以买浙江到广东再飞回山东,只要能回山东,啊我的大葱。

他可以接受1号出发,2号出发,3号出发,5号出发,10086号出发,只要能出发。

这就代表了谁也不知道需求的流量会是多么的突发,购买的内容会是多么复杂。

我再举一个例子大家就懂了,微博厉害吧?每天这么大的流量,这么多的关注度。

但是为什么经常突然一个明星出轨或者结婚或者负面新闻,微博就要挂掉?是没有技术实力还是服务器资源不够?

都不是,是因为这种流量是突发性的,谁也不知道会突然出现这种爆炸增长,所以服务器就挂掉了。

这就和泼水节上大家都做好了心理准备,但是你泼开水一样。

这谁遭得住啊。

所以建议所有明星出轨之前,先微博报备一下,这样他们出轨的放心,我们吃瓜吃的也安心。

他好,我也好。

第三,电商业务不是一个一次性要完成所有流程的业务,但是12306必须一次性完成,这进一步加大了难度。

大家思考一下,电商购物,实际上是并不是一次性的。

一个典型的电商购物流程是,浏览,和商家撕逼价格,下单,和商家撕逼运费以及快递,物流发货,买家收货,和商家撕逼售后。

即使排除撕逼这些事情,电商购物流程也是有很多节点的。

整个流程下来最快最快次日达也要24小时。

这就代表电商的数据压力没有想象中那么大,可以异步处理,完全可以先全部付款完成,然后再慢慢处理发货,然后再慢慢处理售后。

就像你要刷B站,又要烧开水,你完全可以先烧开水,在烧水的过程中刷B站,这就是异步的好处,可以同时多任务并行,而且不影响用户的核心体验。

你下单后3小时发货和5小时发货,不影响用户,容错率高。

而12306不一样,卖票就是要立刻完成。

从下单,到付款,到锁定票,都是一气呵成的,没有任何缓冲时间,不存在我下单一个票2天后告诉我成功或者失败这种事情,头都给消费者打爆。

所以12306等于是没有这种缓冲周期,需要直面所有的流量,在最短时间内满足所有人的所有需求,所有的业务都要在极短时间内处理完成,这就是会被一下子塞满。

同样是1亿用户,4个步骤,电商可以分4个步骤淡定处理,每个步骤处理1亿流量,而且可以分多小时,多天处理。

12306就只能一口气处理4亿,没有缓和,这个压力可想而知。

第四,电商业务的库存管理是相对简单的,而12306是极其复杂的,复杂到我给你简单讲讲你都会抑郁。

想想看,作为电商平台,管理货物虽然也有难度,但本身的统筹不过固定产品的增删改查,有多少就是多少,付款了就减一,上量或者退货就加一,顶多出现最后一个商品被2人同时拍下的小概率事件,这都是小事儿。

而12306是完全不同的难度,二者难度差别大概相当于草履虫大战那美克星人。

我举个例子,如果你是一个在北京读书的人,家在北京南边,过年要回家。

随便选一辆北京往南开的车,G65这辆高铁,北京始发终到珠海,一共17个站,共计10小时55分钟。

就这一个路线,17个站,支持随意站上车,随意站下车,会有多少种可能性?

因为坐车不可能只做单站循环,就是不能北京到北京。

所以是从1加到16,一共136种可能性,注意哦,电商同样的场景只有增删改查4种可能性。

这样一个线路的实时库存,做起来是非常令人头大的。

假如有人买了从北京到广州,那么对应的所有库存就要减1,但是广州到珠海的库存不减。

假如有人买了从武汉到珠海,那么对应的就是武汉到珠海沿途所有线路的库存减1,但是北京到武汉不减。

假如有人买了石家庄到漯河西,那么北京到保定,北京到石家庄不用变,漯河西到珠海段,不用变。

其余所有可能性都要变,因为只要经过这两个站点的路线,都受到影响。

实际业务中,这样的变动,会导致整个库存实时变动,并且是P级别的数据变动,如果对数据库稍微有所了解,都知道这种数据变动对于资源的消耗有多么恐怖,一个1GB的电子表格跑查询都能把很多高性能电脑跑崩掉,早期电子表格甚至限制在6万5千行,就是防止把电脑跑崩。

而这种级别的数据,需要消耗的资源说出来都违反广告法。

所以为什么12306夜里11点到早上要维护?这样的数据库如果不是天天维护保护缓存,早就彻底完犊子了。

每一天,12306都是拿命来奋斗。

所以之后买票的时候,要宠溺一点,温柔一点,你买的不是票,是工程师们的头发。

第五,业务去重需要大量的判断。

电商业务其实严格来说是不需要用户实名制的,也不需要对用户的身份去重,只要你付钱,有货就发货,除非是限购商品稍微拦截一下,但是面对黄牛党,也就是象征性的拦截,大多数不会跟钱过不去。

而12306不一样,12306的模式是,每一个人都要限购。

同路线,同时间,要限购。

就拿北京到珠海举例,12306是不允许一个人在同一天购买大量北京到珠海的车票的,这对其他人不公平,所以要限制人的出发时间和购买路线。

那么问题来了,如果要加限购,那么就要把这个人的当前购买信息,时间,全部缓存下来,这个人的每一笔交易,都要和他当前的已有行程进行去重匹配。

这对数据资源的消耗是非常恐怖的。

并且,并且,查重还有另一个现实问题,就是12306本身是允许非本人买票的,就是我可以给我的爸妈买票,我爸妈也可以给我买票,只要添加乘车人就可以了,这就代表着,同一个人的信息,完全可以在不同的时间节点被不同的买家添加,这又带来了巨大的计算压力。

这就和人生一样,太难了。

第六,和12306比流量,什么公司都没有资格。

很多人真的以为双十一就是流量的巅峰的了,其实并不是,12306才是最恐怖的流量巅峰。

为什么?因为电商的业务模式不会导致用户重复点击,而12306无时无刻不在被所有用户重复点击。

举个例子,你在双十一买东西,是不是买了就走了?买不到你就是骂几句,然后也走了。

一个用户的点击是有限的,你就算单身30年,给你放开了点,你能点多快?

要知道对系统而言,每一次点击,都是一次数据交换。

12306面对的点击流量,要大的多,你买票的时候,是会不断刷新操作的,你在查询余票的时候,每一次都是要跑所有的数据库来帮你同步当前的余票信息,这个负载量和计算量是天量。

而且,现在非常非常多的人在用抢票软件。

所谓的抢票软件,原理就是不停地用机器去读取12306的数据接口,一秒刷几百次,1个人用抢票软件,可以造成几千个人一起刷产生的数据压力。

各大抢票软件公司加起来用户几千万是有的,14亿人刷出几百亿人的流量都绰绰有余。

你知道12306的流量负载有多强了么?

在12306上,人人都是火影忍者,天天影分身。

会有人问,既然挑战这么大,12306这么不容易,那么为什么不去像国外先进技术取经?为什么不去加大投入服务器?为什么还在找借口?

为什么12306不引入国外的先进技术呢?

答案其实很简单,国外也罩不住啊。

早在2012年,12306就有公开招标,预算不设限,只要能解决问题,世界顶级机构都来竞标了,但是最后基本都放弃了。

因为当时的技术环境没有人能解决这个问题。

国外很多技术的确先进,但是没有一个国家或者公司,历史上接受过14亿人的数百亿级别流量的挑战,你能说出来的世界顶级公司,没有一家能承受这么强的即时交易流量。

他们有的流量更大,但就和电商业务一样,是可以异步操作,不需要身份唯一性,没有这么复杂的路线存量计算的,你们也知道国外的高铁和地铁是什么垃圾水平,我们遇到的问题他们从来没有遇到过。

这是很现实的一件事情。

全中国14亿人的出行需求面前,大家都是一样菜。

说到这里,我想到了我们行业里的一个笑话,有个脸书的早期工程师回国加入阿里巴巴,离开前,他说要去拯救阿里巴巴的数据系统,结果回来之后才发现,他在脸书遇到的数据挑战,和阿里巴巴比起来,简直是幼儿园水平。

在数据挑战上,我们遇到的数据挑战绝对是世界最强梯队的,很多时候没有之一。

那么为什么不加服务器呢?技术不够,硬件来凑。

加服务器面临的核心问题有3个。

第一个,加服务器只是增加了储存能力,并不能解决数据库的问题,这就和一个女人生孩子要10个月,不代表你找10个女人就能在1个月内生孩子。

第二个,如何驱动这些服务器?当年阿里云领先世界的技术,就是突破了同时驱动5000台服务器,成为世界三大云之一。

要知道,阿里云面对的只是双十一,而12306的挑战要更加恐怖,需要同时驱动的服务器数量更多,这也是有技术挑战在的。

另外,阿里云也确实参与了12306的建设。

第三个,成本问题。

12306往往全年都表现良好,只有重大节假日才会偶尔出现崩溃,你为了应付一年中为数不多的重大节假日,采购了这么多高折旧率的服务器,平时根本用不上,这是一种浪费钱的行为。

中国铁路本身就是巨额亏损,国家持续补贴的,这种情况下,为了短时间的需求,投入海量的成本,这笔账不用多说吧?

你看看隔壁微博,宁可每次被流量击溃也不肯长时间维系大量服务器,微博看财报每年都是盈利的,金额都是按照亿来结算的,人家都是这个态度,你知道12306有多不容易了吧。

而且这可都是纳税人的钱。

到最后,买票问题的本质,还是供需关系。

全国这么多人,在这么短的时间内要完成这么多的出行,远远超过了铁路本身的运载能力,在这种供小于求的情况下,怎么调配资源,都没有办法解决供需问题。

东西就这么多,大家都想要,能怎么办呢?

加钱,继续扩建?

要知道很多线路只有春节才爆满,平时都空车亏损,为了满足小部分人短时间的出行,大量浪费资金投入到已经富余的路线中,并不划算的。

有这个钱,应该去投入到更多的地方。

12306这种基础设施,天然就是挨骂的,做的好,大家不会夸,做的有一点点不好,会被骂到死,这是基础设施的悲哀,所有人都有不合理的期待。

何况,12306在只花了这么少预算的情况下,做到现在这个程度,已经是超神操作了。

不考虑资金成本和技术成本张口就骂,是一种不太理智的行为。

怎么不去说人家印度火车卖挂票呢?

热 文 推 荐 

小米MIX Alpha获得百万美金技术大奖;索尼或将推出无边框手机;Linus 不建议用 ZFS | 极客头条

每位初级开发都应该知道的六件大事

Rust 入坑指南:鳞次栉比 | CSDN 博文精选

2019 互联网大事记:谁是最后的赢家?

中国程序员在美遭抢劫电脑遇害,数百人悼念

2019,不可错过的NLP“高光时刻”

详解CPU几个重点基础知识

在以太坊上开发 Dapp 的瓶颈和门槛有哪些?| 博文精选

你点的每个“在看”,我都认真当成了喜欢

发布了1640 篇原创文章 · 获赞 4万+ · 访问量 1324万+

Guess you like

Origin blog.csdn.net/csdnnews/article/details/103942676