如何实现秒杀系统 ?

0
小熊
小熊
管理员提问于7月前

面试高频,一般出现在三面,考察脑子灵活度(如果你从来没有接触过),或者知识掌握的广度

答案 1
0
小熊小熊 管理员回答于7月前

漏斗的思路,是架构上设计,客户端,网关,后台服务,层层限流,保证业务处理不被流量洪峰打挂了

客户端侧降低服务端压力:

* 动静分离,静态资源放到cdn(某些服务为了更新及时不能放cdn)、前端文件webpack打包减少请求量
* 减少后端请求数量,只保留抢按钮的请求
* 时间使用客户端时间,不到时候无法点击
* 增加互动游戏再降低并发请求量
* 秒杀活动一旦发起,不允许修改详情等信息
* 保证web安全,防止xss与重放(随机数、时间戳、序列号)、CSRF等攻击方式

部署架构:

* 后端服务部署多个可用区,防止单可用区故障导致整体不可用
* 需要配置安全策略:防火墙、防DDOS、API网关、WAF;接入风控挡掉不合法请求
* 使用负载均衡SLB,根据不同节点负载情况分发流量
* 硬件上使用SSD

后端防护:

* 防止超卖,推动库存确认流程到支付阶段
* 库存信息放到内存中(redis)
* 使用另外的数据库集群

过载保护(有损保护):

* 服务降级:秒杀期间关闭某些服务,比如淘宝关闭退款流程,微信抢红包延迟到账
* 熔断:接入监控系统,根据系统节点的承载能力和服务质量有关,比如 CPU 的使用率超过 90%,请求错误率超过 5%,请求延迟超过 500ms, 它们中的任意一个满足条件就会出现熔断,主动拒绝请求;
* 限流:速度过快时加入验证码流程,接入API网关可以进行流量控制,请求过滤和控制,并过滤的请求,前端根据错误码返回友好的页面(已抢完之类)常见限流算法:漏桶>令牌桶>滑动窗口>计数器