秒杀
2021-01-26 20:10:50 37 举报
秒杀
作者其他创作
大纲/内容
是
调起支付
7层日志,http code
否
支付结果异步通知成功mysql减库存(此步骤也可以不做)失败不做操作
定时任务:1、检查订单状态,比如大于N分钟未关闭订单2、可能性:插入订单成功,发送rocketmq消息失败,或者消费rocketmq消息后,改状态失败3、从第三方支付查询支付结果
数据库
订单中心:插入订单数据到mysql,未支付
redis预扣库存
查询商品
进入客户端支付页
加分布式锁:发送延时消息,大于等于支付等待时间校对库存是否确实卖光,避免少卖如果还有库存,同步库存到redis,并且删锁
应用
rocketmq
事务
进入订单页提交订单
VIPkeepalive+lvs
鉴权、限流、风控
是否存在该商品?是否结束?是否在时间周期内?
获取秒杀资格
Redis集群
延时消息
提单失败
Nginx
redis预扣库存后宕机,返回给应用成功,但是尚未同步到从节点,宕机从节点晋升为主节点,相当于未预扣库存,导致超卖,此时需要将订单置为失败,并且退款
Hive
Localcache
分布式事务:1、修改订单状态2:发送rocketmq事务消息2.1已支付mysql减库存2.2未支付回滚预减库存
被限流
预扣成功?
秒杀失败
mysql减库存失败
带上订单信息
点击秒杀
LBS
第三方支付客户端
网关
转发请求,修改目标地址,客户端和服务端直连
第三方支付服务端
获取资格成功?
限流
检查是否支付成功
0 条评论
回复 删除
下一页