常见秒杀系统解决方案
2021-04-28 10:34:45 41 举报
AI智能生成
常见秒杀系统解决方案及思路
作者其他创作
大纲/内容
特点
高并发
请求量远远大于库存量
原则
层层拦截,尽量拦截流量在上游
充分利用缓存
异步消息队列
设计要素
限流
限流组件sentinel
削锋
排队
基于消息
答题
复杂验证码,时间控制
提交请求,缓存2-10s,避免重复请求
分层过滤
CDN->前台读系统(商品详情系统)->后台写系统(交易系统)->DB
异步
消息队列
缓存
分布式缓存系统
可拓展
加机器
独立部署
解耦合
压测
性能指标
瓶颈
解决方案
前端
页面静态化,CDN
动静分离
静态数据缓存
用户浏览器
CDN
cache
动态数据
异步JS请求
二级缓存
CDN
物理机部署
热点数据提前缓存
基于访问埋点,提前找出热点商品,LRU策略
业务上选,如提交报名秒杀商品
2/8
页面防重复提交
提交即置灰
JS层面,限制用户在x秒之内只能提交一次请求 如此限流,80%流量已拦。
用户限流
同一时间,同一ip
活动链接动态化
防止URL提前泄露
怎么实现
基于时间戳做加密链接
后端
网关层
限制UID访问频率
ip
接口限流
同一个uid,限制访问频度,做页面缓存,x秒内到达站点层的请求,均返回同一页面
同一个item的查询,例如手机车次,做页面缓存,x秒内到达站点层的请求,均返回同一页面 如此限流,又有99%的流量会被拦截在站点层
服务层
秒杀信息缓存,库存
用户合法性校验
资格校验
考虑下游查询接口
秒杀结束,内存标记
预冻结库存,库存<=0,秒杀结束,置为结束
decr
保证原子操作
Lua脚本
判断是否秒到,秒到则结束
预秒杀到的UID,通过消息队列去排队下单
真正秒杀开始:校验商品,库存,用户是否秒到,加锁去下单
优化
秒杀接口隐藏,避免直接暴露,防外挂
用户点击秒杀按钮的时候,根据用户id生成唯一的加密串存入缓存并返回给客户端,然后客户端再次请求的时候带着加密串过来,后端进行校验是否合法,若不合法,直接返回请求非法;
token机制
UID
client info
时间戳
DB层(脆弱)
秒杀库存表(乐观锁)
version
stock > 0
秒杀订单表(uId,商品Id,联合唯一索引)
部署
秒杀业务单独部署一套
避免其他业务受影响
业务降级
参考:双11退款业务降级 不可用
0 条评论
下一页