明明只是一个简单的卖票软件,怎么搞成这个鬼样子,人家QQ微信几亿人同时在线聊天,激情互动,还有各种小视频。
另一边双十一几亿人同时购物疯狂败家剁手都没有问题,为什么12306一出手,就是炸穿裤衩的用户体验?
虽然本篇文章会有大量极为硬核的技术术语,但是我会说的尽量简单,大家一定要认真听,多记笔记,过年在饭桌上吹牛的时候,这都是王炸,不用谢我了。
不是说你看了这篇文章就能买到票,实际上买票是一个玄学。
只是说,能死的明白点。
如果说双十一的难度是人间模式,那么12306差不多相当于是地狱十八层,还要再挖个坑的难度。
实际上现实生活中非常多的买火车票返乡的人,例如辛苦的农民和工人朋友,很多都是不会线上操作的,他们只会线下彻夜排队,非常辛苦,所以12306也必须照顾他们的感受,不能断掉线下业务。
这就导致了12306本身是一个线下与线上同享数据的复杂业务,复杂度要高出双十一一个数量级的。
和纯粹简单的双十一相比,12306就像一个饱经社会摧残的老油条,你永远不知道他们会什么时候会出现什么幺蛾子。
这就像一个纯洁男孩第一次和他的男朋友约会,怕他不来,又怕他乱来。
这就代表着,双十一面对的是一个高确定性的任务,只要有确定性,流量再大也不是特别难的问题。
当你知道困难会在什么时候发生的时候,这个困难就不再困难了。
真正的困难,在于不可知。
他可以接受1号出发,2号出发,3号出发,5号出发,10086号出发,只要能出发。
都不是,是因为这种流量是突发性的,谁也不知道会突然出现这种爆炸增长,所以服务器就挂掉了。
这就和泼水节上大家都做好了心理准备,但是你泼开水一样。
这谁遭得住啊。
所以建议所有明星出轨之前,先微博报备一下,这样他们出轨的放心,我们吃瓜吃的也安心。
他好,我也好。
即使排除撕逼这些事情,电商购物流程也是有很多节点的。
整个流程下来最快最快次日达也要24小时。
而12306不一样,卖票就是要立刻完成。
从下单,到付款,到锁定票,都是一气呵成的,没有任何缓冲时间,不存在我下单一个票2天后告诉我成功或者失败这种事情,头都给消费者打爆。
我们都知道,再厉害的东西,被强行塞满,都是会坏掉的。
你们不要瞎想,我说的是公路。
我举个例子,如果你是一个在北京读书的人,家在北京南边,过年要回家。
随便选一辆北京往南开的车,G65这辆高铁,北京始发终到珠海,一共17个站,共计10小时55分钟。
这样一个线路的实时库存,做起来是非常令人头大的。
其余所有可能性都要变,因为只要经过这两个站点的路线,都受到影响。
实际业务中,这样的变动,会导致整个库存实时变动,并且是P级别的数据变动,如果对数据库稍微有所了解,都知道这种数据变动对于资源的消耗有多么恐怖,一个1GB的电子表格跑查询都能把很多高性能电脑跑崩掉,早期电子表格甚至限制在6万5千行,就是防止把电脑跑崩。
而这种级别的数据,需要消耗的资源说出来都违反广告法。
所以为什么12306夜里11点到早上要维护?这样的数据库如果不是天天维护保护缓存,早就彻底完犊子了。
每一天,12306都是拿命来奋斗。
所以之后买票的时候,要宠溺一点,温柔一点,你买的不是票,是工程师们的头发。
同路线,同时间,要限购。
就拿北京到珠海举例,12306是不允许一个人在同一天购买大量北京到珠海的车票的,这对其他人不公平,所以要限制人的出发时间和购买路线。
那么问题来了,如果要加限购,那么就要把这个人的当前购买信息,时间,全部缓存下来,这个人的每一笔交易,都要和他当前的已有行程进行去重匹配。
这对数据资源的消耗是非常恐怖的。
并且,并且,查重还有另一个现实问题,就是12306本身是允许非本人买票的,就是我可以给我的爸妈买票,我爸妈也可以给我买票,只要添加乘车人就可以了,这就代表着,同一个人的信息,完全可以在不同的时间节点被不同的买家添加,这又带来了巨大的计算压力。
这就和人生一样,太难了。
举个例子,你在双十一买东西,是不是买了就走了?买不到你就是骂几句,然后也走了。
一个用户的点击是有限的,你就算单身30年,给你放开了点,你能点多快?
要知道对系统而言,每一次点击,都是一次数据交换。
12306面对的点击流量,要大的多,你买票的时候,是会不断刷新操作的,你在查询余票的时候,每一次都是要跑所有的数据库来帮你同步当前的余票信息,这个负载量和计算量是天量。
而且,现在非常非常多的人在用抢票软件。
所谓的抢票软件,原理就是不停地用机器去读取12306的数据接口,机器的速度绝对是比你单身30年的手速还要威猛几十倍,一秒刷几百次,1个人用抢票软件,可以造成几千个人一起刷产生的数据压力。
各大抢票软件公司加起来用户几千万是有的,14亿人刷出几百亿人的流量都绰绰有余。
你知道12306的流量负载有多强了么?
在12306上,人人都是火影忍者,天天影分身。
早在2012年,12306就有公开招标,预算不设限,只要能解决问题,世界顶级机构都来竞标了,但是最后基本都放弃了。
因为当时的技术环境没有人能解决这个问题。
国外很多技术的确先进,但是没有一个国家或者公司,历史上接受过14亿人的数百亿级别流量的挑战,你能说出来的世界顶级公司,没有一家能承受这么强的即时交易流量。
他们有的流量更大,但就和电商业务一样,是可以异步操作,不需要身份唯一性,没有这么复杂的路线存量计算的,你们也知道国外的高铁和地铁是什么垃圾水平,我们遇到的问题他们从来没有遇到过。
这是很现实的一件事情。
全中国14亿人的出行需求面前,大家都是一样菜。
加服务器面临的核心问题有3个。
第一个,加服务器只是增加了储存能力,并不能解决数据库的问题,这就和一个女人生孩子要10个月,不代表你找10个女人就能在1个月内生孩子。
第二个,如何驱动这些服务器?当年阿里云领先世界的技术,就是突破了同时驱动5000台服务器,成为世界三大云之一。
要知道,阿里云面对的只是双十一,而12306的挑战要更加恐怖,需要同时驱动的服务器数量更多,这也是有技术挑战在的。
另外,阿里云也确实参与了12306的建设。
第三个,成本问题。
12306往往全年都表现良好,只有重大节假日才会偶尔出现崩溃,你为了应付一年中为数不多的重大节假日,采购了这么多高折旧率的服务器,平时根本用不上,这是一种浪费钱的行为。
中国铁路本身就是巨额亏损,国家持续补贴的,这种情况下,为了短时间的需求,投入海量的成本,这笔账不用多说吧?
你看看隔壁微博,宁可每次被流量击溃也不肯长时间维系大量服务器,微博看财报每年都是盈利的,金额都是按照亿来结算的,人家都是这个态度,你知道12306有多不容易了吧。
而且这可都是纳税人的钱。
到最后,买票问题的本质,还是供需关系。
全国这么多人,在这么短的时间内要完成这么多的出行,远远超过了铁路本身的运载能力,在这种供小于求的情况下,怎么调配资源,都没有办法解决供需问题。
东西就这么多,大家都想要,能怎么办呢?
加钱,继续扩建?
要知道很多线路只有春节才爆满,平时都空车亏损,为了满足小部分人短时间的出行,大量浪费资金投入到已经富余的路线中,并不划算的。
有这个钱,应该去投入到更多的地方。
12306这种基础设施,天然就是挨骂的,做的好,大家不会夸,做的有一点点不好,会被骂到死,这是基础设施的悲哀,所有人都有不合理的期待。
何况,12306在只花了这么少预算的情况下,做到现在这个程度,已经是超神操作了。
不考虑资金成本和技术成本张口就骂,是一种不太理智的行为。
怎么不去说人家印度火车卖挂票呢?
-
置顶张小胖
-
Desperado
-
李亚楠 Alan Li
-
荀迎曙
-
ctw作者
-
Hyper-V
-
ONCE LOVER
-
王漂亮
-
孙昊天@小来
-
送你一朵小红花作者
-
-
Kahlen
-
斟茶兵
-
Lishiii作者
-
十荡十决
-
丫头作者
-
matha
-
owen作者
-
夜幕の终焉
-
柯佼
-
镇金作者
-
ONCE LOVER
-
Dodding =w=
-
Jerry
-
Eddie
-
frankie
-
末
-
Patrick,獣になれる
-
Ziggy
-
没有人
-
Kam