1、服务单一职责+独立部署
秒杀应该有一个单一的服务
2、秒杀链接加密
每个商品有一个token加密,在秒杀开始前这个token不会被传输到页面,只有在秒杀开始这个token被用户传输过来,之后再后端对这个token判断是否为这个商品的token值。
3、库存预热+快速扣减
把库存数量变成redisson的信号量存入redis中,库存请求一次就信号量就减1
4、动静分离
所有静态资源都放入nginx中
5、恶意请求的拦截
识别非法恶意拦截,比如每秒发送1000次请求或者不使用token进行请求,就说明有问题
所以需要拦截这些恶意请求,一般在网关层拦截。
6、流量错峰
可以用验证码或者加入购物车,分流到其他服务中。
7、流量限流&熔断&降级
限流
前端限流:设置每次的点击次数
后端限流:设置请求的最大数,超过了这个数就等待
熔断
秒杀场景需要快速的返回用户结果,当秒杀的调用链有一个远程调用服务不可用或者超时不应该让用户等待,应该快速返回失败的结果给用户。
降级
当服务压力顶不住了,可以使用降级功能让用户跳转到其他页面,减轻压力。
8、队列削峰
使用redsson的信号量保证原子操作,只要信号量扣减就给队列发送消息,订单服务监听这个队列。
如: 有100万请求,只有100个库存(信号量),只要有人购买成功了就给信号量减1,减完之后就把这个扣减成功用户信息发送消息给队列,订单服务监听这个队列,订单服务消费消息创建这个用户的商品订单。

1642

被折叠的 条评论
为什么被折叠?



