电商项目系列文档(三):秒杀的设计

秒杀业务
一、秒杀价格(参考京东)
1、秒杀开始前,秒杀商品显示原价(涉及除秒杀活动页面外所有商品的显示页面,包括购物车、收藏、足迹等页面)
2、秒杀开始前,可以使用原价购买商品
3、秒杀开始前,秒杀活动中的商品显示秒杀价,而非原价。进入商品详细可显示原价 
4、秒杀开始后,秒杀商品显示秒杀价(所有商品显示页面)
5、秒杀结束后,秒杀商品恢复原价(涉及除秒杀活动页面外所有商品的显示页面,包括购物车、收藏、足迹等页面)
 
二、秒杀库存(根据项目实际情况总结)
1、商品库存是以SKU为单位计量的,即每个商品的每个规格为最小库存计量单位
2、SKU秒杀库存和实际库存分开设置,如实际库存为50,秒杀库存可使用<=50的任意一个值
3、由于秒杀开始前也可以购买商品,所以下单时应同时减少SKU的实际库存和秒杀库存,取消订单时如秒杀活动还在进行,也应该同时恢复实际库存和秒杀库存
4、相反的,秒杀商品生成订单后,SKU的秒杀库存和实际库存也应该同时减少,取消订单后同时恢复
5、应限制秒杀商品的购买数量,否则容易因为恶意下单导致库存不足
 
三、秒杀活动
1、秒杀活动开始结束时间不能重叠(针对一个B端,如果有开发平台则每个商户不能重叠)
2、秒杀活动的规则一般是:当天/未过期/开始时间最早的一条,如果需要同时显示多个秒杀活动,类似京东,则需要另外设计
3、秒杀活动的倒计时:在前台用js控制/开始前显示:离秒杀开始还剩00:00:00/开始后显示:离秒杀结束还剩:00:00:00
      秒杀活动结束后,自动替换下一个秒杀活动,如果没有则不显示秒杀活动
4、秒杀活动一般时间范围为当天,不会跨天;时间精确到秒
5、可根据秒杀库存数、秒杀销售数在前端显示秒杀销售进度
6、秒杀活动表的基本设计
      编号、活动名称、活动类型、开始时间、结束时间、是否有效、活动描述、创建时间、创建人、修改时间、修改人     
 
 
秒杀商品
1、一般来说,秒杀商品只需要设置秒杀价,但有些特殊的业务场景,比如某系统所有商品都是【价格+积分】的组合,那么秒杀商品通常也需要设置【秒杀价格+秒杀积分】
2、选择秒杀商品时应将其相关信息列举清晰,如商品名称、规格、原价、优惠价、积分、库存、是否显示、秒杀Title说明、显示序号(秒杀商品以一个SKU为单位进行设置)
3、秒杀商品的图片需要单独设置,比如PC、APP、微信可能需要设置不同图片
4、秒杀库存的设置:不能大于SKU库存,还需考虑秒杀开始前的购买情况,开始前购买是否减秒杀库存 
5、秒杀销售数:记录秒杀销售数,主要用户统计和前端显示
6、秒杀商品表的基本设计
      商品编号、活动编号、秒杀价格、秒杀积分、库存数、销售数、显示顺序、秒杀图片(各种客服端)、商品描述、是否有效、创建时间、创建人、修改时间、修改人     
 
 
秒杀使用技术
一、价格服务
1、引入秒杀活动后,所有显示商品价格的地方都需要判断该商品是否是秒杀商品并获取秒杀价格(不管有没有秒杀活动都需要调用相关逻辑)
2、获取秒杀价格服务的调用量非常大,所以需要考虑优化
     1、引入缓存,秒杀价格从缓存获取
     2、定时任务更新缓存:当任务检测到价格变化时,实时更新缓存
3、价格服务的参数尽可能简单
     1、输入:商品编号、客户端类型、其它可能的扩展字段
     2、输出:商品编号、秒杀价、秒杀积分、其它秒杀信息
 
二、
1、因为秒杀瞬间并发比较大,所以很可能影响到库存,如果库存数据在缓存缓存中,需要对缓存加锁;如果在数据库中判断,则需要对数据库加锁
原文地址:https://www.cnblogs.com/gossip/p/5048660.html