这是我参与「第五届青训营 」伴学笔记创作活动的第12天
系统设计的定义
为了达到某种目的,个体组成整体的过程
-
系统
- 关联的个体
- 运作规则
- 组成工作的整体
-
设计
- 设想和计划
- 目的
- 过程安排
系统设计的流程
- 场景分析
- 存储设计
- 服务设计
- 可扩展性
如何发现系统的瓶颈
- 火焰图分析
- 链路追踪
- 性能测试
电商秒杀业务
消费者、供给侧、交易环境
商品:具有交易价值和属性的信息载体
SPU:标准产品单元
SKU:库存保持单元
- 秒杀业务特点:
- 瞬时流量高,前几分钟,用户并发量才真正突增,达到秒杀时间点时,并发量会达到顶峰。但由于这类活动是大量用户抢少量商品的场景,必定会出现
狼多肉少的情况,所以其实绝大部分用户秒杀会失败,只有极少部分用户能够成功。 - 读多写少,在秒杀的过程中,系统一般会先查一下库存是否足够,如果足够才允许下单,写数据库。如果不够,则直接返回该商品已经抢完。由于大量用户抢少量商品,只有极少部分用户能够抢成功,所以绝大部分用户在秒杀时,库存其实是不足的,系统会直接返回该商品已经抢完。
- 实时要求高
- 瞬时流量高,前几分钟,用户并发量才真正突增,达到秒杀时间点时,并发量会达到顶峰。但由于这类活动是大量用户抢少量商品的场景,必定会出现
如何设计秒杀系统
-
功能
- 秒杀活动发布
- 秒杀商品详情
- 秒杀下单
-
并发
- 万人参与秒杀
- QPS 1W+
- TPS 1K+
-
存储
从底层到上层依次为:mysql-redis-localcache
-
子服务
- 用户服务
- 风控服务
- 活动服务
- 订单服务
-
基础组件
- ID生成器
- 缓存组件
- MQ组件
- 限流组件
-
扩展
- 流量隔离
- CDN(内容分发网络)
- 缓存优化
- 流量管控
- 数据库扩展
- MQ扩展
- Redis扩展
- 服务水平扩展
- 服务垂直库扩展
-
系统架构图如下
- 秒杀流程图如下