部分内容来源于许令波老师在网上的分享,这里是我做的一些笔记:
秒杀主要解决两个问题:
- 一个是并发度
- 一个是并发写
秒杀系统的整体架构原则:
- 高性能
- 一致性
- 高可用
秒杀系统应该注意的架构原则:
- 数据要尽量少
- 请求数据
- 响应数据
- 压缩数据
- 编码数据
- 序列化数据
- 请求要尽量少
- 数据请求
- 资源请求
- 三次握手
- DNS解析
- 合并请求
- 路径要尽量短
- 依赖要尽量少
- 系统分级依赖( 高可靠性分级尽量不要依赖低可靠性系统 )
- 不要有单点
- 应用无状态
- 参数配置化
- 配置中心
架构改造:
- 独立部署
- 独立集群
- 独立缓存
- 秒杀答题防作弊
- 动静分离(不用每次刷新整个页面)
- 本地缓存(一般是静态数据)
- 限流保护
瓶颈:
- 10W级别加缓存
- 100W级别 还需要考虑网络因素
减库存的方式:
- 下单减库存
- 付款减库存
- 预扣库存
减库存问题:
- 下单减库存:恶意下单问题,成交减少
- 付款减库存:超卖问题,体验较差
- 预扣库存+安全反作弊模式可以有效解决前面两个问题
减库存优化:
- 库存缓存到cache(一般不需要精确的一致性)
- 本地内存cache 解决大并发读
- 逻辑非常简单可以使用缓存减库存
- 多种数据要同时减必须用数据库事务(热点商品放到单独的库中,不要影响别人)