秒杀场景特点
- 参与人多
- 商品库存少
- 速度快,几秒就结束,真男人
大部分电商的秒杀都是这样的,所以基于以上特点,我们总结的技术方面的难点就是:
- 流量大
系统如何抵抗搞负载,保证高可用 - 高并发
如何保证资源扣减正确,比如商品库存扣减正确,不超卖,不一件多卖,红包使用正确
解决方法
- 限流
对下单接口,查询接口做限流准别,防止过多流量进入系统, - 缓存
某些资源要提前缓存,不走库查询,这其实是提高QPS,防止请求过长 - 并发锁
数据库层面的乐观锁机制,当然也可以加缓存锁,防止并发问题,但那样太限制系统的并发,所以建议采取乐观锁,甚至分段锁来提高并发。
优化热点:提高系统QPS
提高QPS,就是让给你系统运转的更快。优化的核心就在于热点数据,说到底就是这么多流量都访问几个数据,这几个数据就成为了热点数据。
功能降级:降低调用时间限制
防止下游的应用拖垮系统,需要对功能降级,或者降低http调用时间、dubbo时间,超时就认为调用失败。
缓存
缓存一部分数据,时间快于直接访问数据库。可以考虑本地缓存,本地缓存来降低访问缓存的请求。有一个秒杀数据集合,这样可以针对这些数据做一些优化处理。
分段锁
类似currentHashMap一样,将100个库存分成多段,这样并发就提高了5倍,这样可以提高QPS。