思路:对于秒杀系统,两个架构优化思路:
1)尽量将请求拦截在系统上游
2)读多写少的常用多使用缓存
1、限制用户在x秒之内只能提交一次请求
2、同一个uid,或同一类查询(例如车次)。限制访问频度,做页面缓存,x秒内到达站点层的请求,均返回同一页面
3、对于写请求,做请求队列,每次只透有限的写请求去数据层,如果均成功再放下一批,如果库存不够则队列里的写请求全部返回“已售完”。用redis,lua脚本扣库存,负数返回失败。
4、对于读请求,用缓存。
5、保证活动数据库和库存数据一致:分布式事务或消息队列。下单减库存/支付减库存。
6、消息队列削峰填谷。
7、资源静态化、用CDN动静分离。
8、应对恶意请求和爬虫:验证码、动态url。
9、动态扩容。
10、熔断限流降级机制