秒杀场景:
大量用户在同一时间同时进行抢购
怎么去做
1、秒杀相关的活动页面相关的接口,所有查询能加缓存的,全部添加 redis
的缓存;
2、活动相关真实库存、锁定库存、限购、下单处理状态等全放 redis;
3、当有请求进来时,进入活动 ID 为粒度的分布式锁,第一步进行用户购买
的重复性校验,满足条件进入下一步,否则返回已下单的提示;
4、第二步,判断当前可锁定的库存是否大于购买的数量,满足条件进入下
一步,否则返回已售罄的提示;
5、第三步,锁定当前请求的购买库存,从锁定库存中减除,并将下单的请
求放入 kafka 消息队列;
6、第四步,在 redis 中标记一个 polling 的 key(用于轮询的请求接口判
断用户是否下订单成功),在 kafka 消费端消费完成创建订单之后需要删除该
key,并且维护一个活动 id+用户 id 的 key,防止重复购买;
7、第五步,消息队列消费,创建订单,创建订单成功则扣减 redis 中的真
实库存,并且删除 polling 的 key。如果下单过程出现异常,则删除限购的 key,
返还锁定库存,提示用户下单失败;
8、第六步,提供一个轮询接口,给前端在完成抢购动作后,检查最终下订
单操作是否成功,主要判断依据是 redis 中的 polling 的 key 的状态;
9、整个流程会将所有到后端的请求拦截的在 redis 的缓存层面,除了最终能下订单的库存限制订单会与数据库存在交互外,基本上无其他的交互,将数据库 I/O 压力降到了最低;
秒杀的大概流程
最新推荐文章于 2023-02-07 13:26:32 发布