【高并发】秒杀系统设计方法论

1.服务单一职责 + 独立部署

秒杀服务即使自己扛不住压力,挂掉,也不能影响别的服务

2. 秒杀连接加密

防止恶意攻击,模拟秒杀请求,1000次 / s 的去请求这个链接, 或者内部工作人员提前秒杀商品。
可以给链接加一个随机码, 秒杀开始才放出这个随机码

3. 库存预热+快速扣减

秒杀是读多写少, 无需每次都实时检验库存。我们库存预热放到Redis中,信号量控制进来的秒杀请求。

4. 动静分离

nginx做好动静分离,保证秒杀和商品详情页的动态请求才到后端的服务器集群。可以使用CDN网络,分担静态资源压力。

5. 恶意请求拦截

识别非法攻击请求并进行拦截。在网关层实现拦截

6. 流量错峰

使用各种手段,将流量分担到更大宽度的时间点。 比如输入验证码才能抢,或者先加入购物车才能再提交订单。

7.限流&熔断&降级

前端限流 + 后端限流
限制次数、限制总量。比如超过的流量不放过了, 用阿里的 sentinel 组件
熔断:调用链任何一个人出现问题, 其他请求过来直接返回,而不是一直阻塞等到超时返回(会有累积效应导致都很慢)。
降级:流量太大了,快把服务器压垮了,直接把流量转到降级页面。比如 “请稍后重试”页面

熔断和降级的异同
相同点: 都是为了保护大部分服务的可用性和可靠性,防止崩溃。 用户最终体验到的都是某个功能不可用
不同的:熔断是被调用方故障,触发的系统主动规则。 降级是基于全局考虑,停止一些正常的服务释放资源。

限流
对打入服务的请求流量进行控制,使服务能够承担不超过自己能力的流量压力。用 Sentinel 组件

8. 队列削峰

把请求给队列,队列再慢慢处理。
比如双十一所有秒杀成功的请求,进入队列,慢慢创建订单,扣减库存即可。

秒杀流程

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44179010/article/details/124403332