如何设计一个秒杀系统?

本文探讨了如何设计一个秒杀系统,关注点包括高并发下的性能优化(如热点数据处理、静态资源分发)、高可用性的实现(如集群化、限流措施)以及一致性保证(减库存方案和接口幂等)。还提到了性能测试工具如JMeter等在测试中的应用。
摘要由CSDN通过智能技术生成
  • 如何设计一个秒杀系统?

为什么秒杀系统的设计是一个难点?

  1. 秒杀开始,会有大量用户同时参与,因此需要满足高并发和高性能
  2. 保证秒杀的整个流程的顺利进行,需要满足高可用
  3. 商品库存有限,在大量订单的情况下,一定不能超卖,需要保持一致性

高性能

1. 热点数据处理

热点数据:某一时间段内被大量访问的数据
处理方案:热点数据放在缓存Redis中,并且最好可以写入到jvm内存一份(多级缓存),并设置个过期时间,需要写入到jvm的热点数据不宜过多,避免内存占用过大,要设置淘汰策略。

2.静态资源处理

处理方案:使用CDN(内容分发网络)。将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。

高可用

1.集群化

解决方案:Redis通过异步复制搞个一主多从来提高可用性和读吞吐量,需要用到sentinel(哨兵)对运行节点进行监控,主节点出现故障时,能帮助实现故障转移,确保Redis系统可用性

2.限流

①接口限流

使用Sentinel,提供流量控制、熔断降级、系统自适应保护等功能来保护系统的稳定和可用性
除了直接对接口进行限流之外,还可以对用户、IP进行限流,限制同一用户以及IP单位时间内可以请求接口的次数

②问题/验证码

一方面可以避免用户请求过于集中,另一方面可以有效解决用户使用脚本作弊

③提前预约

通过提前预约来过滤掉一批人

3. 流量削峰

使用消息队列

4. 降级

对一些服务进行降级,来保证核心任务的正常运行。

5.熔断

防止因为秒杀交易影响到其他正常服务的提供

一致性

1.减库存方案

一般情况下都是 下单减扣库存。
秒杀商品信息一般都提前放入缓存中,可以通过Redis对库存进行原子操作

2.接口幂等

幂等:不论执行多少次相同的请求,产生的效果和返回的结果都和发出单个请求是一样的。
前端可以通过按钮致灰处理
后端可以通过分布式锁处理(一般基于Redis来做,推荐Redisson)

性能测试

比较常用的性能测试工具:Jmeter,LoadRunner,Galtling,ab

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值