从零开始的12306开发 思路篇

1、为何选择12306项目

        现实中有很多高并发场景:

  1. 商品秒杀,如淘宝双11:并发高,但业务相对简单,核心:下单、库存-1、不要超卖
  2. 微信支付宝平台
  3. 微博突发热点
  4. 用户操作日志
  5. 12306购票平台:业务复杂度高于淘宝双11的,动态库存,选座功能,线上线下并行。持续的高并发业务,需要更综合的高并发设计:不停的刷票、绝对不能超卖(比如商城,超卖可以进行补库存,但车票性质不同,满了就是满了,无法进行扩充,会让用户产生冲突的)

        12306有多忙碌:一天请求1600亿、平均180万/条。

2、如何确保不超卖不少卖还能实现高并发

2.1 余票查询:记录站站余票

        这里有ABCDE五个站点,直线排列,一辆列车。就会有4+3+2+1=10种票型,如图所示。假设有10张余票,若是买了A-B站,那么所有跟A-B站有交集的情况都要受到-1的影响,紧接着又买了C-D站,此时A到C所有的和D-E都不会受影响,还是原来的票数。但是若途径CD站点的,将会受到多个方面的影响:1、有人之前买过该座位号的票的话,其他座位号不受影响,那么该票数跟以前一致  2、买了之前的站站从未有人买过的座位号的话,就要额外-1了,如图的右边所示例。

2.2 座位购买:记录座位销售情况

        用二进制01代表销售情况:比如0111代表该座位只有A-B可以买 

3、核心功能分析

4、功能模块划分

 5、架构划分

 6、数据库表划分

会员模块:

  • 会员表:手机号
  • 乘客表:会员ID,姓名,身份证,旅客类型
  • 车票表:会员ID,乘客ID,乘客姓名,日期,车次信息,座位信息

业务模块:

  • 车站表:站名,站名拼音
  • 车次表:车次编号,车次类型,始发站,出发时间,终点站,到站时间
  • 到站表:车次编号,站名,进站时间,出站时间,停站时长,里程
  • 车箱表:车次编号,箱号,座位类型,座位数,排数,列数
  • 座位表:车次编号,箱号,排号,列号
  • 每日车次表:日期,基础车次信息
  • 每日到站表:日期,基础到站信息
  • 每日车箱表:日期,基础车箱信息
  • 每日座位表:日期,基础座位信息,销售详情
  • 每日余票表:日期,车次编号,出发站,出发时间,到达站,到站时间,各种座位的余票信息

其它:

  • quartz相关表
  • seata相关表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值