02、12306这个系统架构到底有多牛?
2-1 众多流行并发项目,为何选择12306?
高并发场景有哪些?
商品秒杀,淘宝双11 核心: 不能超卖
微信支付宝平台
微博突发热点
用户操作日志
12306购票平台
为何选择12306?
业务复杂度高于淘宝双11,考验个人程序设计能力
- 动态库存
- 选座功能
- 线上线下
持续高并发业务,需要更综合的高并发设计
- 不停的刷票
- 绝不能超卖
2-2 12306 是如何成为全球最忙碌的网站之一
12306有多忙碌
一天的请求量大概1600亿,平均180万/秒
- 请求一般都是二八分
平均一年售出30亿张,高峰期日售票能力达到了2000万张
高峰期1秒可卖出1300张票
如何解决忙碌问题
提高处理能力:QPS和TPS
- 堆积硬件
- 软件:Gemfire(分布式内存数据库) 查询速度从15s降低到0.2s
- 算法:模型、逻辑
削峰
- 业务:验证码、分时段、排队
- 技术:限流、异步

2-3 如何保证不超卖、不少卖,还要能承受极高的并发?
模型设计&逻辑实现
余票查询:记录站站余票
- 一列火车有5个站,可拆分成4+3+2+1=10条站站记录
座位购买:记录座位销售详情
- 一列火车有5个站AE,1号座位:0111,代表只剩AB可买

2-4 12306系统核心功能讲解

2-5 12306系统功能模块划分
gateway 网关模块:路由转发、登录校验
member 会员模块:会员、乘客、已购买的车票
business 业务模块:所有的车次数据、余票信息
batch 跑批模块:所有的定时任务,可通过界面启停
web 模块:会员相关界面
admin 模块:管理员相关界面
2-6 12306整体系统架构设计
简单的模块划分

加入common模块,放置公共代码;制作generator代码生成器模块

加入中间件及微服务组件

2-7 12306系统数据库表讲解
会员模块:
- 会员表:手机号
- 乘客表:会员ID,姓名,身份证,旅客类型
- 车票表:会员ID,乘客ID,乘客姓名,日期,车次信息,座位信息
业务模块:
- 车站表:站名,站名拼音
- 车次表:车次编号,车次类型,始发站,出发时间,终点站,到站时间
- 到站表:车次编号,站名,进站时间,出站时间,停站时长,里程
- 车箱表:车次编号,箱号,座位类型,座位数,排数,列数
- 座位表:车次编号,箱号,排号,列号
- 每日车次表:日期,基础车次信息
- 每日到站表:日期,基础到站信息
- 每日车箱表:日期,基础车箱信息
- 每日座位表:日期,基础座位信息,销售详情
- 每日余票表:日期,车次编号,出发站,出发时间,到达站,到站时间,各种座位的余票信息
其它:
- quartz相关表
- seata相关表
2-8 百万人同时抢1万张票,系统如何保证其正常及稳定性?
前端
- 针对静态资源做CDN
- 页面静态化
- 倒计时&Loading
- 使用验证码削峰
后端
- 微服务-服务拆分
- 负载均衡
- 限流降级
- 缓存 —> 注意 缓存击穿、雪崩、穿透等问题
- 令牌
- 异步处理
数据库
- 分库:业务分库、读写分离
- 分表:横向分表、纵向分表
- 冗余设计,反范式,空间换时间
- 分布式数据库
其它
- 分时段秒杀
- 弹性扩容
- 候补+排队
02、12306这个系统架构到底有多牛?
http://yuanql.top/2023/07/07/00_项目经历/YuanqlProject/Springboot3+微服务实战12306高性能售票系统/02、12306这个系统架构到底有多牛?/