秒杀系统设计
2020-03-31 08:34:18 190 举报
AI智能生成
如何设计一个秒杀系统
作者其他创作
大纲/内容
一致性
减库存方式
下单减库存
在应用程序中通过事务来判断,即保证减后库存不能为负数,否则就回滚
直接设置数据库的字段数据为无符号整数,这样减后库存字段值小于零时会直接执行 SQL 语句来报错
使用 CASE WHEN 判断语句
付款减库存
预扣库存
优化
缓存中减库存
适合缓存逻辑单一场景
数据库中减库存
并发锁问题
应用层排队
数据库层排队
高可用
高可用系统建设
架构阶段<br>
异地容灾
异步化
分组隔离
避免单点
编码阶段
限流保护
超时处理
异步线程
错误捕获
测试阶段
beta测试
自动化对比测试
发布阶段
分批发布
多版本发布
运行阶段
数据对账
自动降级
过载保护
实时监控报警<br>
故障发生
故障定位
快速恢复
plan B 兜底<br>
降级
限流
客户端限流
服务端限流
基于 QPS 和线程数的限流
拒绝服务
架构原则
数据要尽量少
请求数据和返回数据少
系统依赖数据少<br>
请求数要尽量少
合并 CSS 和 JavaScript 文件
路径要尽量短<br>
多个相互强依赖的应用合并部署在一起,把远程过程调用(RPC)变成 JVM 内部之间的方法调用
依赖要尽量少
给系统进行分级,防止重要系统被不重要系统拖垮
避免单点
机器配置动态化
应用无状态化<br>
高性能
数据的动静分离
静态数据缓存
把静态数据缓存到离用户最近的地方
统一Cache层<br>
使用CDN二级缓存
失效问题
命中率问题
直接缓存 HTTP 连接
Web层做缓存:Web 服务器(如 Nginx、Apache、Varnish)更擅长处理大并发的静态文件请求
动静分离改造
URL 唯一化
分离浏览者相关的因素<br>
分离时间因素
异步化地域因素<br>
去掉 Cookie
动态内容处理
ESI 方案<br>
CSI 方案<br>
热点数据<br>
定义
静态热点数据
动态热点数据
发现
发现静态热点数据<br>
报名筛选
大数据Top N<br>
发现动态热点数据<br>
处理
优化
缓存热点数据
限制<br>
id一致性hash
隔离
业务隔离
秒杀报名,提前预热<br>
系统隔离<br>
分组部署,单独域名<br>
数据隔离
单独Cache/MySQL
流量削峰
排队
消息队列
线程池加锁等待
FIFO,FILO常用内存排队算法实现
请求序列化到文件,顺序恢复
答题
分层过滤
浏览器层
按钮置灰,禁止重复提交
限制X秒只能提交一次
站点层
相同UUID,限制访问频率
item详情做缓存
服务层
写请求进消息队列
读请求做缓存
数据的二次校验
数据层
强一致性校验
提升性能
性能因素
减少CPU执行时间
合理的并发线程数
发现瓶颈
CPU诊断工具:JProfiler 和 Yourkit
jstack 定时地打印调用栈
优化系统
减少编码
网页输出可以直接进行流输出
Velocity 优化实践
减少序列化
Java极致优化
直接使用 Servlet 处理请求
直接输出流数据
并发读优化
应用层的 LocalCache
0 条评论
下一页
为你推荐
查看更多