秒杀活动如何实现

一、分析

1.1 数据库准备

简单设计的话我们需要有一个产品,这个产品有相应的库存即可。

id 产品 库存
1 火箭 1000
2 大炮 800
3 坦克 600

访问量过高火或者MySQL配置文件中max_connections值过小,会产生“MySQL: ERROR 1040: Too many connections”的异常情况。考虑增加从服务器分散读压力,或者查看与设置max_connections:

show variables like'%max_connections%';
set global max_connections=1000 重新设置

1.2 redis准备

只有数据库实现秒杀功能会存在以下一些问题:

  1. 短时间内的大访问量对现有网站业务造成的冲击。
  2. 高并发下对服务器数据库造成的极大负载压力。
  3. 不能因为数据库宕机导致整个系统服务崩溃

我们需要将商品读到redis中,对于商品的消费,我们可以使用事务或者分布式锁watch来实现。

1.3 RocketMq准备

消息队列的作用:

  • 削去秒杀场景下的峰值写流量——流量削峰
  • 通过异步处理简化秒杀请求中的业务流程——异步处理
  • 解耦,实现秒杀系统模块之间松耦合——解耦

生产者流控,因为broker处理能力达到瓶颈;消费者流控,因为消费能力达到瓶颈。

  1. 生产者流控:
  • commitLog文件被锁时间超过osPageCacheBusyTimeOutMills时,参数默认为1000ms࿰
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值