最近酒桌上跟一个技术圈的哥们争论面红耳赤,话题还是那个经典的面试题:“12306和淘宝双11,到底谁的并发量大?”

哥们信誓旦旦地拿出短视频当论据,说12306的高峰负载是淘宝的几十倍。虽然我喝多了没发挥好,但这事儿真的不能只看表面上的“谁人多”。今天咱们就撇开情绪,纯从技术角度来盘一盘,为什么说12306的架构难点,其实在很多方面比双11更棘手。

1. 妄谈“QPS”是在耍流氓

首先,我们要明确一个概念:并发(Concurrency)不等于请求数(QPS)。

  • 双十一模式: 这是一个典型的“读多写少”场景。虽然海量用户在零点涌入,但大家主要是在抢库存。对于系统来说,核心是“扣减库存”。库存扣完了,后面的大量请求其实可以直接在边缘层被拦截,或者直接返回“已售罄”,不需要穿透到核心数据库。系统追求的是极短的瞬时峰值吞吐量

  • 12306模式: 这是一个极其复杂的“事务性读写”场景。春运期间,虽然也是海量点击,但难点在于“余票查询”和“订单生成”必须高度一致。你不能把同一张票卖给两个人。更恐怖的是,“站到站”的查询组合是天文数字(A到B、A到C、途径A站...)。每一次查询都可能触及核心数据库,且涉及复杂的动态库存计算。

12306春运抢票排队界面

12306春运期间的排队等候界面,是应对高并发流量的典型策略。

所以,说并发是几十倍差距可能夸张,但说处理复杂度,12306确实要高出好几个量级。

2. 真正的技术难点:IO瓶颈与一致性

双十一流量峰值数据图表

双十一零点瞬间的流量洪峰示意图,展示了极高的瞬时吞吐量。

如果只是单纯抗流量,现在的云计算和CDN随便堆机器就能解决。但12306面临的是两个物理难题:

  1. 数据库锁竞争: 同一车次、同一席位,全国只有一张。在开售瞬间,成千上万的请求可能争抢这一张票。数据库层面的行锁、甚至更细粒度的锁机制会面临极大的性能瓶颈。而淘宝卖一件衣服,可能只有S、M、L三个SKU,锁冲突的粒度完全不同。
  2. 计算IO密集: 淘宝双11可以大量使用内存计算(Redis)来抗流量,把库存预热到内存里。但12306的区间查询逻辑太复杂,很难完全用简单缓存覆盖,导致必须频繁回源数据库,产生大量的磁盘IO。

3. 既然这么难,为什么没崩?

很多人觉得12306体验差,其实能撑住已经算是技术奇迹了。他们用了不少“降级”和“分流”策略(俗称“技术硬抗”):

  • 削峰填谷: 你是不是发现排队是个漫长的过程?这就是在把瞬间的并发请求平滑化,不要让数据库瞬间雪崩。
  • 分时段放票: 本质上也是为了错峰,把原本会集中在1秒内的流量强行拉长。
  • 读写分离与多级缓存: 虽然前面说了很难,但他们依然在尽力做静态资源的CDN加速和部分查询结果的缓存。

4. 总结:不能一概而论的“王者”

回到最初的争论,如果非要比:

  • 比瞬间流量峰值、比带宽消耗、比CDN抗压能力,淘宝双11绝对是王者。它是“广度”上的胜利,是全球最大的流量洪峰。

  • 比计算逻辑复杂度、比数据一致性难度、比系统在数据库高锁竞争下的稳定性,12306才是真正的魔王。它是“深度”上的挑战,解决的是人类历史上最大规模的复杂资源调度问题。

所以,下次再遇到这种争论,别急着比谁大,先看看对方是在说“吞吐量”还是“计算难度”。这两个系统,一个是举重冠军,一个是马拉松冠军,根本不在一个赛道上。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭