小程序--微信拼团设计实现
拼团设计 流程(整体)
运营设置拼团的商品--->拼团人数,价格,开团时长
团长开启拼团-->此时设置redis库存,有效时长
参团成员参加:(并发处理,类似秒杀系统,不过没有秒杀流量大,所以没有使用mq等消息中间件做DB的保护层)
本文就是讲解【参团成员参加】拼团的设计。
参团成员参加流程
系统说明:
拼团系统的关键还是库存的控制,(秒杀系统除了库存,最重要的是保护DB,一般使用mq提高请求处理速度以及削峰填谷),而我们系统使用微信统一下单服务,创建完订单5分钟内是不能删除微信订单的,上图的超时处理是用户没有取消订单并且至少超过5分钟未支付的订单,当微信返回取消订单成功后,恢复本地库存。
注意:
1 如果取消微信订单异常了?怎么处理库存?
因为有网络调用就有既不成功也不失败的状态,只能通过系统重试,如果出现既不成功也不失败并且接口满足幂等性就可以当作失败处理,进行下次重试。当然库存不做恢复处理,直到下次成功。
2 库存会出现不一致情况吗?
因为库存服务专门为商品提供库存管理,实现提前锁定库存,避免超卖的现象。同时,通过超时处理任务发现已抢到商品,但未付款的订单,并在规定付款时间后,处理这些订单,将恢复订单商品对应的库存量。
下单完成--->锁定库存;取消订单---->释放库存; 这一切都是redis 单线程模型保证的,所以不会出现库存不一致情况。
当然DB也可以保存一个当前库存使用量,方便查看,但是不能用作业务库存并发控制,只是展示目的。
3 两个用户都检测到有库存(最后一个),同时下单你不就超卖了吗?
不会,即使同时下单成功,但是扣减库存肯定只有一个成功,此时将另一个订单设置为失败即可,用户看不到订单,无法付款,更不会超卖!