商品列表测试 /goods/toList
1.没有缓存前 吞吐量 2293
2.添加redis缓存之后 吞吐量 6693(之前是2293)
商品详情测试 goods/toDetail/1
没有做静态化 吞吐量 2048
做了静态化,同时redis缓存商品对象 吞吐量3356,能达到6949
静态化 goodsDetail.html?goodsId=1
秒杀接口测试 /seckill/doSeckill
1.没有做接口优化 吞吐量1300 出现超卖 库存为负数
商品超卖 10个库存,卖掉483个
商品库存为负数 -7
2.返回RespBean.success(order) 吞吐量达到2200
3.商品秒杀完成,只有查询 吞吐量达到3148
4.秒杀静态化,同时添加防止超库存卖,添加从redis缓存中判断是否重复秒杀 吞吐量达到2900 ,出现超卖,库存为0
订单表 超卖84
库存表中库存为0 都为不同用户秒杀
接口优化后,秒杀压测 3500 qps
redis 10条订单
数据库 10条订单
库存为0 没有超卖
接口优化后,redis预减库存,通过lua脚本 吞吐量 4093
接口限流问题补充说明:
redis计数器 临界问题
1分钟100次
第一个一分钟50-60秒 100个请求
第二次一分钟0-10秒 100个请求
整体来看,中间的一分钟之内达到了200个请求
漏桶算法,队列机制
水小,洞大,资源浪费
令牌桶
稳定生成令牌桶 如果没有满,生成令牌 token
请求拿令牌,如果拿到令牌,业务处理
可以应对短时间大量请求
同时又像漏桶,稳定生成令牌
总结
漏桶 保护他人
令牌桶 保护自己 将请求压力交给服务器处理