抢了个票,还以为发现了12306的系统BUG
任何区间段
购票这一个场景,就涉及到了好多的问题,要兼顾不同区间段的旅客数量,分配不同的席位库存。还要考虑到铁路的收入,长行程旅客优先等等(这就是为什么有时候本站出发无票,但往前多买几站就会有票的原因吧)。客票系统架构猜想
TCC
则是一个相对折中且成熟的方案:TCC
过程中要解决的问题:•幂等,由事务发起者生成全局唯一事务ID,参与者根据事务ID幂等。•网络中断导致一阶段丢包,二阶段允许空回滚;即锁定资源为空的回滚请求,返回回滚成功。•网络拥堵导致请求错序,二阶段需要防资源悬挂;即,已经回滚过的事务ID,不允许锁定资源。
订票业务模型猜想
一次购票行为包含哪些属性
购票时间
、车次
、席位号
、乘车人
、乘客类型
、出发地
、目的地
、出发时间
、到达时间
、行程区间集合
。行程区间集合
中的行程区间
,需要包含区间ID
和 经过该区间的开始结束时间
两个部分。用户购票区间存储设计
用户行程时间区间存储设计
出发时间
加上对应的占用时间段耗时时长,即可。余票库存存储设计
余票和席位绑定设计
1-1-A
则表1车厢-1号-A座
。区间冲突幂等控制
乘车人
、行程区间
两个属性做幂等控制。总结
推荐阅读:
欢迎关注微信公众号:互联网全栈架构,收取更多有价值的信息。
评论