2023年的春节已经过去了,但春运还在继续。提到春运,大家肯定首先想到如何回家,然后就会考虑开车,坐高铁或者飞机等方式。
今天我们就来聊聊12306这个订票系统网站。
据统计数据显示,12306网站已经成为了全国最大的火车票销售网站。铁道部每年需要向12306网站投入约2亿元人民币的运营费用。

很多人不明白,阿里的双十一也是全民狂欢,腾讯的微信QQ加起来有十几亿的用户,都不会崩溃,为什么12306就这么不堪一击?
其实,这种表面上的比较很不合理,就像妈妈总会对你说,你看隔壁家的孩子,同样是孩子,怎么就你胖,就你学习差。
你可能也会感到奇怪,但又说不出个所以然。没关系,今天我就给大家科普一下,12306为什么会经常出现崩溃的情况。
1、12306一上线就面临着极大的挑战,比双十一要难十倍以上。
很多人拿12306和双十一比较,觉得双十一这么大的流量都能承受,12306却承受不了。这种比较其实很不准确。任何不考虑业务模式,只谈流量的都是在耍流氓。双十一的业务模式是一个分布式的业务模式,它可以通过自动扩容机器来解决流量问题。
我用简单的话来解释一下,双十一上的流量组成,并不是一个店铺,而是无数个互不相关的店铺组成。
就像现实生活中一样,你节假日去一个大商场,里面人很多,但人们都在各自的店铺里。
如果觉得拥挤了,人流量太大了,那就多开几个门就行了。双十一也是这样的,当流量增加的时候,就多开几个门(多加几台服务器),基本上就可以应对了。
而且近几年双十一已经开启了预售模式,增加了确定性。每年双十一都会提前一个月预热,虽然有广告的嫌疑,促进大家消费。但更重要的是提前准备货物,提前扩容服务器。
比如,
100个人里面,我能确定有30个要买袜子的,那卖袜子的服务器流量我就多加几台。有60个确定要买猪肉的,那卖猪肉订单的服务器我就给它来个10台。这样服务器都准备好了抗压了,你还能打垮它吗?
双十一最大的优势是确定性。只要确定了需求和资源分配,就好办了。不确定性才是服务器最怕的。你看国民吃瓜平台微博,只要“明星一出轨,微博就瘫痪”。
突然来了一大波流量,根本不给你准备的时间,那只能被打趴下了。12306一开售票就是双十一。首先,在12306上只有一种商品——票。这种商品的特点在于,不能简单地用有或者没有来判断。需要根据每条线路的起点和终点来计算。
举个例子,
北京到上海,中间经过两站。
北京南——济南西——南京南——上海虹桥。
卖北京的始发站的票,一共有3种卖法。这一趟线上就有3+2+1 = 6种票。这还只是中间站比较少的线路,有的线路要经过30个站,那就有29+28+…+2+1 = 435种卖法。甚至还有更多的线路。
它的难点在于,如果某一条线路上卖出去一张票,要全量更新数据库,必须同步更新所有数据库。还是拿北京到上海举例,如果济南西到上海虹桥有一张票卖出去了。
那么北京南到上海虹桥的库存票要减一,北京南到济南西的不变。济南西到南京南的库存要减一,南京南到上海虹桥的库存要减一。在同步的过程中,不能出现任何错误。这不能像电商平台一样,有几天发货时间,仓库里没货了能给你再造一个。
火车的运力是固定的,列车上有多少个座位,能站多少人,都是一个确定的数字。一张票不能卖给A,又卖给B,那样这两个人会打架的,他们也不可能排排坐。这就要求每卖出一张票,就要全量更新数据库。
虽然可以把北京到上海的票放到A服务器上,把北京到哈尔滨的票放到B服务器上。像电商一样采用分布式抗压,但卖出去票后两个数据库还是要同步更新。
因为,有可能买北京到上海票的人,在A服务器上也会买北京到哈尔滨的票。你不可能不让他买票吧?电商的货物没有交集,大家都管理自己的库存。卖猪肉的服务器不需要更新卖衣服的服务器,这就是12306和双十一的本质区别。
正是因为这一点区别,12306的难度和流量是双十一的10倍以上。
2、市面上还有很多抢票软件,在背后给12306的服务器造成了巨大压力。
2010年是网络购票元年,12306官网上线。2011年,一些程序员自发开发了浏览器抢票插件,并免费提供给用户使用。2012年,开始有互联网公司开发专业抢票软件,猎豹浏览器的抢票插件还把12306给搞崩溃了。
抢票软件其实就是爬虫程序,用python就能写。
用代码模拟浏览器去请求12306的服务器,并分析返回结果提交订单。即使你手速很快,你1秒钟最多能请求2次12306,点多了手也会酸。而机器不会酸,机器1秒钟能请求10次,甚至更多。
据统计,2019年1月4日刷票页面,请求量达到了1310.6亿次.
幸好12306前几天把一些抢票软件给屏蔽了。妈妈再也不用担心我被抢票软件骗钱了。
其实,抢票软件就是靠机器的速度,在开售票的一瞬间提交订单。但是随着抢票软件越来越多,排队的用户越来越多。你花50块买了个加速包,排到的队尾,还是买不到票。
而且抢票软件是黑箱操作,谁知道你花50块有没有给你排队,说不定根本不给你下单。还一直忽悠你分享加速包,让你的亲朋好友帮你加速,不仅让你郁闷,还让你的亲友团不爽。
3.12306的技术进步除了服务器的问题,12306也经常被人诟病。2014年1月9日,12306网站完全瘫痪,报错的蓝色窗口让网上购票的旅客怒骂不已。根据公开信息调查,有87.9%的网友表示12306崩溃影响到了正常购票。
最常见的说法就是“人家支付宝24小时交易350个亿都没瘫痪,只要马云接手,12306就不会这样!
”
第二年春运,马云团队确实来了,但不是接手,而是利用阿里云分流了75%的12306火车票查询业务,帮助其平稳度过流量高峰。
事实上,这已经是马云团队能做到的最好了。淘宝的交易量虽然大,但是其系统架构的分散度较高,各个订单之间的关联度不大;而12306每卖出一张票都要对全线路做数据更新,因此系统负载相比淘宝来说集中很多,直接搬淘宝的方案也没有用处。
淘宝的电商身份决定了阿里巴巴可以通过部署大量的服务器来分散压力,12306的应用类型则比较单一。不是12306不想采购更多服务器,而是12306买太多的服务器也没什么作用。当然,在看过了12306今年的改版页面以后,我们或许可以期待12306的应用变得更丰富,进而部署更多的服务器。
12306移动端的功能越来越丰富,有点像“唯一铁路电商”的样子
事实上,12306在技术上一直在努力。
2012年,铁总选择了PivotalGemFire分布式内存计算平台(DistributedIn-memorycomputing)来改造12306,利用技术升级了当时的主要瓶颈余票查询系统。改造后,系统里单次查询的最长时间从之前的15秒左右下降到0.2秒以下,缩短了75倍以上,并且支持每秒上万次的并发查询,高峰期间达到2.6万个查询/秒吞吐量,整个系统效率显著提高。
再往后,2013年年底,12306启动了新一轮架构优化,包括在公有云上部署车票查询服务,通过策略配置可随时将车票查询流量分流至公用云,以缓解在售票高峰期网站的处理资源和带宽压力。
同时,12306互联网售票系统采用虚拟化技术实现了一中心和二中心的双活架构,两个中心采取相同的部署,互为备份,各自拥有独立的Web、AS、排队系统、缓存服务集群、车票查询集群、用户数据集群、交易中间件和电子客票库。正常情况下双中心同时在线提供服务,其中任意一个中心发生故障时可由另外一个中心承载全部的售票业务。
最后,在经过软件层面的优化之后,12306的瓶颈其实是核心节点的CPU、内存性能,但是这个性能的提升往往会受限于摩尔定律,不会在短时间得到提升。事实上,基于火车票售卖的动态数据库总量以及运算复杂度,12306已经达到技术上的极限了。
负面形象难改,12306如何突破
12306其实一直在寻求技术进步,然而在公众的眼中,12306却总是呈现出负面的形象,这与12306的用户体验不佳大有关系。所以,技术突破是一方面,提升产品服务意识,优化用户体验也是关键。来源:LRX_365
以上内容数据大部分来自互联网公开数据,不做盈利发表,如需了解开发软件,联系小编