1、为何选择xxxxx
1.1、高并发场景有哪些?
商品秒杀,双11
微信支付宝平台
微博突发热点
用户操作日志
购票平台
1.2、为何选择xxxxx
业务复杂度高于淘宝双11,考验个人程序设计能力
动态库存
选座功能
线上线下 持续高并发业务,需要更综合的高并发设计。
不停的刷票
绝不能超卖
2、如何解决忙碌问题
提高处理能力:QPS和TPS
堆积硬件
软件:Gemfire
算法:模型、逻辑
削峰
业务:验证码、分时段、排队
技术:限流、异步
3、持续秒杀高并发技术
前端
针对静态资源做CDN
页面静态化
倒计时&Loading
使用验证码削峰
后端
微服务-服务拆分
负载均衡
限流降级
缓存
令牌
异步处理
数据库
分库:业务分库、读写分离
分表:横向分表、纵向分表
冗余设计,反范式,空间换时间
分布式数据库
其它
分时段秒杀
弹性扩容
候补+排队
4、如何保证不超卖、不少卖,还要能承受极高的并发?
4.1、模型设计&逻辑实现
余票查询:记录站站余票
一列火车有5个站,可拆分成4+3+2+1=10条站站记录。
座位购买:记录座位销售详情
一列火车有5个站AE,1号座位:0111,代表只剩AB可买。
5、系统核心功能
6、 系统的功能模块划分
gateway 网关模块:路由转发、登录校验
member 会员模块:会员、乘客、已购买的车票
business 业务模块:所有的车次数据、余票信息
batch 跑批模块:所有的定时任务,可通过界面启停
web 模块:会员相关界面
admin 模块:管理员相关界面
7、系统架构设计
加入common模块,放置公共代码;
制作generator代码生成器模块
加入中间件及微服务组件
8、 数据库表
会员模块:
会员表:手机号
乘客表:会员ID,姓名,身份证,旅客类型
车票表:会员ID,乘客ID,乘客姓名,日期,车次信息,座位信息
业务模块:
车站表:站名,站名拼音
车次表:车次编号,车次类型,始发站,出发时间,终点站,到站时间
到站表:车次编号,站名,进站时间,出站时间,停站时长,里程
车箱表:车次编号,箱号,座位类型,座位数,排数,列数
座位表:车次编号,箱号,排号,列号
每日车次表:日期,基础车次信息
每日到站表:日期,基础到站信息
每日车箱表:日期,基础车箱信息
每日座位表:日期,基础座位信息,销售详情
每日余票表:日期,车次编号,出发站,出发时间,到达站,到站时间,
各种座位的余票信息
其它:
quartz相关表
seata相关表