⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 电脑报 「网络」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

要问现在最受用户吐槽的国产软件,可能是微信,尽管不断上线新功能,但大多被网友吐槽“没用”,并且在一次次的更新中变得更加臃肿,占用内存越来越多,导致用户频频抱怨手机空间不够用。

而要问在用户的吐槽声中越做越好的软件,那一定是 12306 平台。早些年间,12306 在运行中出现了很多瑕疵,比如复杂晦涩的交互界面、系统响应卡顿延迟、宕机不断等。人们为了省时省事,宁愿多花钱去使用各种抢票软件或找黄牛,都不愿在 12306 上购票。被骂了十年不吭一声,12306 最终咸鱼翻身做成世界之最

数据显示,12306 平台已成为世界上规模最大的铁路互联网售票系统,注册用户已达 6.8 亿,单日售票能力达 2000 万张以上。铁路 12306 App下载安装累计已达 17 亿多次,12306 网站(含手机 App)最高日访问量高达 2000 亿次,单日最高售票量 1541.3 万张,年度最高售票量达 35.7 亿张。

如今,12306 超越市场上各大抢票软件,成为抢票效率和成功率最高的平台。而时间回溯12306刚上线的那几年,别说抢票,很多人连网站都登不上去。

趁此机会,让我们回顾一下网络购票的发展历程,看看 12306 是否值得“世界第一”的称号。

12306 系统上线前,中国铁路曾经推出过 95105105 的订票热线,比起线下排长队购票方便了不少,但遇到春节这种节日,订票电话很难打通。

2000年,北京曾尝试搭建网络订票系统,上线了“首铁在线”。当时黄牛买票也得排队,大家对于网络购票的需求几乎没有,并且大部分人网速只有可怜的100k。即便如此,一个“五一”小长假,仍使得首铁在线的系统瘫痪掉。经过一系列抢修之后,首铁在线在“正常和瘫痪之间”坚持了8年。

2008年春运前夕,首铁在线宣布放弃网络订票业务,只提供部分信息查询服务。理由是:网站登录人员过多,造成服务器瘫痪。

此后,上海在2009年上线了一套网络购票系统,并且提供送票上门服务。遗憾的是,这套系统上线仅一天,就因为系统故障关闭升级,此后再无下文。

2010年,随着3G网络的普及,当时的铁道部宣布,中国要开始通过网络购票的方式进行售卖火车票。

同年1月30日,也就是当年春运的第一天,铁道部开放并试运营了 12306。而当时的 12306 并不具备网络购票的功能,只能查询列车时刻、票价、余票、代售点和正晚点等信息。

2011年6月1日,在民众对网络购票的极大需求与期盼中,12306网站正式上线。然而2012年春运,也就是12306面临的第一次大考,结果并未令人满意。

服务器几度崩溃,很多人进不了网页;好不容易进去了,要么就刷不出车次信息要么就点击不了购票按钮;甚至还有人出现了抢到票无法支付,或者支付后拿不到票的窘境。

值得一提的是,2011年也是淘宝“双11”上线之时。

有人疑惑,为什么双11的数据同样巨大,可淘宝虽然卡,却没有崩?甚至还有人吐槽12306购票系统就是大学生外包水平。言外之意,12306很简单,现在大家抢不到完全是技术不行、不肯投入。

其实这里 12306 被误解得有点深。曾有程序员提出“12306可能是现在世界上业务逻辑最复杂的系统之一”。其表示,12306 并发量很大,不像天猫双十一是短时间并发,12306 是一出票就是双十一。要知道,12306最多的时候,几亿人同时抢票,任何程序员面对一个每天上亿日活、百万级并发量的网站,可能头疼不已。

据了解,12306 除了线上订单以外,还要兼顾线下订单所形成的数据,包括一条线路各个站之间的最优售票计算,各个站点的余票量计算,业务非常复杂。

就拿余票查询这样一个看似简单的功能而言,其实是经过了技术攻克,才达到了如今的高效运行。

12306 技术部主任单杏芳曾表示,铁路余票计算是非常复杂的,因为我们一趟列车有多个停靠站,它是一个动态复杂计算的过程,相比简单的商品库存简单加减要复杂得多,所以如果计算慢,系统可能就会忙,就会堵。所以我们研发了分布式的内存计算的余票计算基数,让余票计算变得非常高效。

可见,12306 比淘宝双十一的技术挑战更大。

12306建设初期体系架构示意图 图源Coder的技术之路

第一次优化后的12306体系架构 图源Coder的技术之路

第二次优化后的12306体系架构 图源Coder的技术之路

当然了,程序员肯定是最了解12306系统为何这么复杂的,但对普通人来说根本不了解12306背后需要什么样的技术和投入,毕竟时常抢不到票也是事实。

而自第一次春运首秀后数年的春运期间,12306都会很稳定地告诉我们,想如愿抢到票不容易。

例如在2013年春运来临的前几日,12306在3天之内前后发出两次公告称,因硬件设备故障/机房空调系统故障,正组织抢修,暂停互联网售票服务。

2013年12月6日,12306进行了第一次改版,改版之后的12306增加了自动查询、自动提交订单、有票提醒等功能,但是此时的12306还不具备线上自主选座的功能。

在 12306 网页改版两天之后,12306 客户端正式开放下载,从此线上购票摆脱了电脑端的限制正式进入了移动端。

改版升级之后的 12306 也时不时会出现系统宕机与崩溃的情况,一直到 2014 年都没能得到好的解决。

终于在2015年,12306系统迎来了与阿里云的合作。这一年春运期间,阿里云将承担12306系统中75%的流量(车票查询业务)。用户的购票体验也提升不少。

和阿里云合作后的12306,尽管各项功能接近完善,可以提供购票、退票、余票查询、列车时刻表查询等服务。但此时的12306还要面临着一个巨大的挑战——黄牛。

随着火车票实名制的推行以及 12306 网上购票渠道的开通,已经很难在车站见到票贩子了。但黄牛也是与时俱进的,一些技术性黄牛竟然依靠自己编写的爬虫程序倒卖车票。

相较于普通黄牛,技术黄牛更加难以管控,12306 必须不断进行完善和数据维护。

2015年3月,12306 在其登录界面推出了选取图片验证码的方式,有效打击黄牛。此后还采取了一系列措施让买票系统更加公平公证,比如将购票、退票和改签时间由不晚于列车开车前2小时调整为30分钟等等。

2017年,12306 开始支持微信支付,支付方式更加多样化。2018年,12306再次进行了改版升级。

2019年,候补购票功能上线。

在 12306 软件登记购票信息并支付票款后,如有退票、余票,12306系统将自动为其购票,购票速度和成功率都将快于抢票软件。该功能的出现,真正遏制了利用插件盈利的第三方软件,直到此时人们才觉得,抢票也不过如此。

我们可以看到,在这十多年的时间里,背负着争议和批评的 12306,这些年一直围绕用户体验,在服务器和购票系统上不断优化、改版升级,UI改进、速度提升、接入各类服务、加入人性化功能,让旅客体验实现质的飞跃,用实力挽回了口碑,扛起了一个拥有十几亿人口国家的出行重任。

由此看来,世界数据之最,12306 来之不易,也实至名归。

值得注意的是,近日铁路12306 APP再次升级,又上新了多个实用功能。

①城市名和车站名分得更清楚

你有没有因为买错车站而错过火车的经历?官方针对这个痛点进行了升级。在最新版12306 APP首页输入目的地时,系统会自动生成车站列表了。

比如输入“重庆”,页面就会用蓝色的“城市”标签标明“重庆市”,在红色的“火车站”标签下显示重庆市内的所有火车站。

今后如果不能确定要买哪个站,输入城市名再选择即可,系统将车站名和城市名进行了标注和区分,当一个城市有多个火车站时,用 户购票再也不会犯迷糊,能清晰地区分东站、西站、南站、北站。

②出行页面内容更丰富

购买火车票后,12306 APP首页将会出现本人行程的信息,包括车次、出发时间、始发站、终到站。点击详情后,旅客能看到内容更 加丰富的出行服务信息,比如列车信息、疫情防控信息、天气情况等。

③积分可兑换午餐

现在不少人都注册了 12306 的铁路畅行常旅客会员,平时购票乘车时都可以获得积分,可直接用于兑换火车票。

近日12306 APP升级后,在乘车积分的基础上增加了“订餐积分”功能,支持旅客兑换订餐积分,兑换后的积分可以在餐饮业务中进行部分餐品的消费。

不过,订餐积分和乘车积分并不互通。目前订餐积分获得的渠道主要有三个:平安银行万里通积分兑换、中国移动积分兑换、绑定电子券进行领取。

100个订餐积分相当于1元现金,在使用时,输入车次、出发日期、座位号等信息,系统就会提示中途哪些站有供餐服务,用户选择心仪的餐厅和菜品下单,用积分支付即可。到了相应站点,乘务员就会自动把“免费的午餐”送到用户手中。

从升级服务器,到推出候补车票功能、打击网络黄牛、推出各实用功能等等,相信App会越做越好。

那么你觉得 12306 还有什么需要改进的地方吗?

文章目录
  1. 1. ①城市名和车站名分得更清楚
  2. 2. ②出行页面内容更丰富
  3. 3. ③积分可兑换午餐