秒杀系统优化思路:
- 限流:尽量将请求拦截在系统上游
- 缓存:读多写少的常用多使用缓存
1 锁库存
秒杀、红包都需要锁库存,不许超卖,红包少卖的还得退款
2 限流
1)客户端
- 禁止重复提交
- 限制用户在 x 秒之内只能提交一次请求
2)控制层(网关层)
- 同一个 uid、IP,限制访问频度
- 同一个 item 的查询,做页面缓存,x 秒内到达站点层的请求,均返回同一页面
- 对于过期红包、已完成红包、已领用户等做拦截拒绝处理
3)后端异步
- 对于写请求,通过消息队列和异步调用的方式可以实现接口异步处理,快速响应用户请求。
- 如果库存不够则队列里的写请求全部返回“已售完”、“已抢光”
- 对于读请求,缓存
3 降级
- 下单缓存故障,也就是生成红包订单故障和订单缓存故障,则降级为数据库操作,红包订单在数据生成,红包缓存存储在数据库。
- 抢红包缓存故障,则降级为数据库查询,同时打开数据库限流功能,防止数据库超载。
- 资金入库多层降级:拆红包后,单据实时落地,资金转账可以多层处理,比如大红包实时入账,大红包比较显著,实时处理效果更好,小额红包异步转账。
- 用户列表降级:在系统压力大的情况下,非关键路径的用户列表可以降级只查询两屏。
4 可拓展
- 无状态服务设计:无状态化的服务可以进行快速扩容。