秒杀架构
2025-12-04 11:53:11 0 举报
AI智能生成
秒杀
作者其他创作
大纲/内容
秒杀系统业务逻辑
秒杀的问题
大量用户同时刷新界面,会对服务器的带宽造成非常大的压力;
用户在秒杀前后可以多次重复点击按钮,造成很多不必要的请求;
用户可以通过脚本进行抢购,并且抢购成功率非常高;
服务端承受高并发请求,会出现响应过慢或失败等情况;
数据库承受高并发请求,会导致连接池耗尽和响应缓慢;
如果数据库更新设计的不合理,可能会出现超卖的情况;
秒杀系统的问题
限流降级
超卖
架构演进
傻瓜式秒杀系统
架构图
秒杀原始架构
关键点
大量用户同时刷新界面,会对服务器的带宽造成非常大的压力;
用户在秒杀前后可以多次重复点击按钮,造成很多不必要的请求;
用户可以通过脚本进行抢购,并且抢购成功率非常高;
服务端承受高并发请求,会出现响应过慢或失败等情况;
数据库承受高并发请求,会导致连接池耗尽和响应缓慢;
如果数据库更新设计的不合理,可能会出现超卖的情况;
秒杀界面CDN
架构图
加入CDN
关键点
预先把网页的静态资源存放在CDN节点,用户在刷新界面时直接从CDN获取静态资源,从而降低刷新秒杀界面对服务器造成的压力。
秒杀按钮优化
架构图
秒杀按钮控制一次点击前后都不可操作
关键点
用户在秒杀开始前点击按钮,造成很多无用请求;
用户在秒杀开始后多次点击按钮,造成很多重复请求;
秒杀链接优化
架构图
动态URL防止脚本秒杀
关键点
URL动态化
秒杀验证码
架构图
加入验证码
关键点
使用验证码不仅可以增加脚本秒杀的难度,还可以降低请求的QPS
过滤请求
架构图
加入nginx集群负载
关键点
通过Nginx过滤,我们可以把100W的请求过滤为1000个请求,大大减少了服务器端的压力。
Redis缓存
架构图
加入redis缓存
关键点
Redis是不支持事务的,所以可能出现扣减为负数的情况,这种情况下我们可以使用Lua脚本来保证一次扣减操作的原子性,从而保证扣减结果的正确性。
异步更新数据库(完整版)
架构图
关键点
削峰填谷最好的实践就是MQ了。
参考资料
秒杀系统
Seckill
1
2
秒杀Redis逻辑
一文搞懂秒杀系统
0 条评论
下一页