秒杀重点(后端)

目录

1.tomcat 线程池参数优化

2.分布式 nginx 反向代理

3.数据库分服务器

4.多级缓存(查询)

5. nginx lua(最前置热点缓存)

6. 消息中间件(抢单)

7.流量削峰

8.防刷限流


 

1.tomcat 线程池参数优化

  • ① 最大连接数
  • ② 超时时间

2.分布式 nginx 反向代理

  • ① 多服务器,分布式分流

3.数据库分服务器

  • ① MySQL(索引优化,字段分表减少锁竞争)
  • ② redis

4.多级缓存(查询)

  • ① redis
  • ② 本地缓存(guava:LRU淘汰策略)
  • ③ nginx proxy_cache(磁盘访问,不用)
  • 本地缓存 -> redis -> MySQL

5. nginx lua(最前置热点缓存)

  • ⭐协程(不带返回值的函数调用):比线程更加轻量级,一个线程可以拥有多个协程;完全在用户态被管理,阻塞不会像线程切换一样消耗资源,阻塞时可以调用其他协程,性能大大提升
  • ② 在 nginx 指定挂载点插入 lua 脚本,执行一些业务逻辑,减少后端直接访问
  • ③ 使用 openresty 的 share dic(内存中,LRU淘汰策略),或者操作 redis(只读不写)

6. 消息中间件(抢单)

  • ① 交易真正开始前,将库存放入缓存
  • ② 消息队列异步更新数据库
  • ③ 采用事务性消息;订单创建成功,才能消费减库存消息(光靠事务无法控制消费消息)
  • ④ 记录库存流水状态,方便消息队列定期检测(事务可能已经成功,但是在返回时卡死或者数据库压力大,事务很久才提交;记录流水方便检测事务提交状态)
  • ⑤ 罄销做标记
  • ⑥ 不建议异步下单,前端需要等待支付信息返回才能支付(同步)

7.流量削峰

  • ① 秒杀令牌:防止非法下单
  • ② 秒杀大闸:根据库存量,限制令牌数量
  • ⭐队列泄洪(小容灾):流量极大时,对redis与MySQL的压力巨大(下游压力);本地设置一个阻塞窗口(线程池;最好是外部集中式队列不可用后,降级到本地),限制对下游的最大压力;redis 本来就是单线程排队处理,所以无需担心性能

8.防刷限流

  • ① 秒杀前获取验证码
  • ② 直接限制并发(不建议)
  • ⭐令牌桶算法(guava):初始化一定数量令牌,每秒填充一定数量令牌,拿到令牌的用户可以执行操作(适于突发流量;因为有初始令牌量)
  • ④ 漏桶算法:初始沾满所有位置,每秒清空一定数量位置,占到位置的用户可以执行操作(适于平滑网络流量,固定速率流入;因为没有初始的资源)
  • ⑤ 限流维度:接口维度 & 总维度(总维度一般小于所有接口维度相加)
  • ⭐防刷:排队、限流、令牌都只能限制总流量(难做)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值