12 月 30 日,中国铁路官方宣布,2024 年 12 月 30 日至 2025 年 2 月 8 日间,铁路部门在北京市、天津市、上海市、江苏省、浙江省、广东省各车站 往返四川省、重庆市 各车站始发终到列车的长途区段车票发售中,试点推出 “系统自动提交购票订单” 功能。

即日起,铁路 12306 用户可通过新开设的“购票信息预填优化试点”专区,预填乘车日期为春运期间(2025年1月14日至2月22日)任意一天的购票订单,每个订单可选择 “1个乘车日期 + 最多60个车次” 的组合,每名用户最多可同时保有 6 个待提交的购票订单,每个订单的乘车人最多不超过 9 人。

开车前第16天,铁路12306将发送通知,提示用户调整意向车次的优先级、确认订票信息,并选择是否预支付票款,预支付金额按照订单中最高执行票价缴纳。

开车前第15天车票起售时,铁路12306将按照用户设置的优先级,依次为已预支付的用户自动提交购票订单,与采用其他方式的购票请求按照订单提交时间先后顺序一同进入购票队列

购票成功后,预支付金额高于实际票款的将自动退还差价,购票不成功则全额退款,不收取任何额外费用;如未进行预支付,用户可按现有流程,在车票起售时手动提交订单并完成支付。

12306 可以自动购票了!我羡慕了_定时任务

这次铁路 12306 新功能是为了解决春运期间抢票难的问题。举个例子,鱼皮需要从上海到成都,乘车日期是 2025 年 1 月 20 日。以前我需要定个闹钟提醒自己准时抢票,现在只需要提前利用 12306 的新功能,填写好购票信息后狂选 60 个车次并设置好优先级,然后预支付最高票价,就完成了抢票。

当 1 月 5 日车票开售时,系统根据优先级 直接提交订单 。如果鱼皮成功购票,支付的 800 中实际票价为 760,剩余 40 就会自动退款;如果购票失败,则全额退款。

虽然以前携程也有开售自动抢票功能,但是 12306 是开售直接提交订单啊!直接绕过抢票这个流程,相信抢票成功率也会大幅增加吧。作为不在试点区间内的人,我狠狠羡慕了。


虽然这个功能造福了大量用户,但别忘了背后默默付出的技术同学。每年春运期间大家都要抢票,每次抢票对于 12306 的系统来说都是一次考验,因为瞬时间成百上千万流量都会打在 12306 的服务器上。

12306 系统经过了这么多年的 “线上压测”,好不容易平稳运行,现在又要新增一个大功能,无论是研发成本还是测试成本,相信都是巨大的。所以才通过 “试点” 的方式,先对这个功能灰度测试一下,降低大范围上线的风险。效果好的话,我相信后续肯定会全国开放的。

从技术的角度,要完成这次的自动购票功能,除了高并发和可扩展性之外,要考虑很多难题,包括:

  1. 任务优先级排序和调度:支持用户灵活调整车次优先级,确保订单提交顺序合理。
  2. 预支付和退款机制:需要准确管理预支付金额,并在购票失败时及时退还。
  3. 通知和实时反馈:用户需要及时了解购票状态,包括提醒修改优先级和购票结果。
  4. 公平性保障:确保自动提交订单与手动购票在系统处理上的公平性。

说说我猜想的一种实现方式。当用户手动购票时,系统会将 “购票任务” 放入消息队列中排队抢票;而自动购票功能则通过定时任务在车票开售时自动提交订单,同样加入消息队列(还可以在开售前预创建购票任务并存储到数据库中、提前排序等)。

12306 可以自动购票了!我羡慕了_开发_02

那么谁能抢到票呢?肯定不能只靠手速,因为理论上手速一定没有系统执行定时任务更快。需要注意,自动购票 != 秒杀,本质是方便用户而非单纯地提升抢票速度。12306 系统需要通过严格的限流、排队机制和处理策略,同时确保自动和手动购票用户的公平性。总不能让没使用自动购票功能的人抢不到票吧?

即便如此,如果所有人都提前开启自动购票功能,开售时是否仍会形成新的抢票高峰?最终,能否成功购票可能不再取决于手速或操作,而更依赖于算法的公平性和优化程度。我们能否抢到票,很大程度上取决于算法的决定。

更多

💻 编程学习交流:编程导航 📃 简历快速制作:老鱼简历 ✏️ 面试刷题神器:面试鸭