2017年双十一交易额( 五 )


6)退单处理
退单后要同时恢复用户的权益,比如优惠券的再次使用,限购次数等 。确保用户体验 。


2.1.4 商品中心1)限时商品的下架控制
这个和超时订单设计方案类似,前面已经提到不再赘述 。
2)库存管理
普通商品可以直接借助数据库锁实现,一般分乐观锁和悲观锁两种方案,如果采用悲观锁(如select语
句带forupdate),会带来很大的性能阻塞,所以更多的采用乐观锁设计 。(幂等性课题的锁机制有详
细讲解)
乐观锁就是在最后执行库存扣减操作时,将事务开始前获取的库存数量带入到SQL语句中作为更新的
where条件,如果数量相等,则该条更新库存的语句成功执行返回update条数为1;如果不相等,则表
示该商品的库存信息已经被其他事务修改,需要放弃该条update的执行,采用重试处理 。
库存秒杀商品因为大批量的访问在一瞬间涌入,数据库扛不住 。可以采用 redis缓存做decr处理,正常
下单后,再使用mq异步更新到db 。(秒杀不超卖课题的库存控制)


2.2 技术中台2.2.1 数据库优化数据库层的调优,一般发生在大促前的预备阶段,一旦大促开始,对数据库的优化已经来不及了 。

  • 在大促开始前梳理耗时查询业务,对关键业务压测 。
  • 开启mysql的慢查询日志(两种方式)

2017年双十一交易额

文章插图

  • 使用mysqldumpslow命令解析mysql慢查询日志

2017年双十一交易额

文章插图

  • 借助explain查看sql执行计划,对sql调优,或其他优化工具 。


2.2.2 缓存优化1) 策略
热点数据预热:
【2017年双十一交易额】常规缓存设计趋向于懒加载,大促期间的热点数据尽量做到预热加载 。比如某个促销专题,不要等待活
动开始的一瞬间再读库加缓存,搞不好引发击穿 。
细粒度设计:
集合与单体分开存储,缓存结构细粒度化 。如某个橱窗的推荐商品列表,常规存储一个key,value为整
个商品集合 。优化为列表与每个商品详细信息设置两个独立缓存值,在查询环节组装,可以降低发生修
改时对缓存的冲击 。新增一个推荐则失效列表,修改商品则仅仅失效当前商品缓存 。
可用性:
只要缓存失效时间设置分散,雪崩的可能性不大
防范恶意攻击引发穿透,前端做到防刷,业务层面要注意合法性校验,非法key的失效时间需要评
估 。
击穿可能性升高,大促高并发下,修改时,如果采用key删除策略很可能触发击穿,修改少可以优
化为双写 。
2)多级缓存
优化缓存体系,对关键业务请求,如商品详情页,采用多级缓存处理
2017年双十一交易额

文章插图



2.2.3 分流与限流CDN的引入本身起到了按ip分流的作用,但是我们可以在下层做到更细粒度化的控制 。根据业务情况将
不同的请求分流到各自的服务器 。
限流不同与分流,是对下层的保护,当系统超过一定流量后,超过的流量做直接拒绝处理,以便保护后
端的服务,原则就是要么不进来,进来的都正常服务 。常见的限流算法有三种:计数器、漏桶、令牌
桶 。
2017年双十一交易额

文章插图

1) 业务分流
根据不同的业务线分发请求,配备二级域名如b2b.xxx.com,b2c.xxx.com,或者在nginx软负载层针对


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。