系统设计之秒杀系统 | 青训营笔记

137 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 十 天

  • 系统设计
  • 电商秒杀

系统设计

如何区别架构设计与系统设计?

架构设计与系统设计的关系可以比作骨与肉的关系。架构设计是粗线条的宏观结构描述,系统设计不同,它是更加细致的反映了模块间关系、与模块和数据间关系。

如何做系统设计?

4S分析法:

  • Scenario(场景):需要设计哪些功能,设计的质量性能等等需要有什么要求
  • Service(服务):大系统拆分成小系统
  • Storage(存储):数据如何存储,如何访问
  • Scale(拓展):优化维护,解决缺陷,处理可能遇到的问题

如何分析系统瓶颈和优化?

  • 火焰图分析:阻塞和锁抢占问题
  • 链路分析:分析链路余量
  • 全链路压测:模拟请求,压力测试

如何验证系统的可用性和稳定性?

  • 链路梳理
  • 可观测性
  • 全链路测试
  • 稳定性控制
  • 容灾演练

电商秒杀

基本概念:

  • SPU(Standard Product Unit),商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。
  • SKU(Stock Keeping Unit),物理上不可分割的最小存货单元。
  • 秒杀特点:读多写少,瞬时并发量大

秒杀的挑战:

  • 资源有限性
  • 反欺诈
  • 高性能
  • 防止超卖
  • 流量管控
  • 扩展性
  • 鲁棒性

4S分析:

  • 场景

    • 秒杀场景读多写少,可使用Redis作为缓存层,并且进行缓存预热
    • 并发量大,不能直接调用扣减库存、生成订单等API,可以加入MQ进行流量削峰
  • 服务

    • 将系统细分为如下模块:秒杀服务、商品服务、订单服务和支付服务
  • 存储

    • 库存扣减应该加锁实现
    • 借用Redis来实现分布式事务(seata,ZK都可以实现)
  • 扩展

    • 还能如何拓展增加秒杀系统的鲁棒性呢?

思考:

用户订单服务消息仍在MQ中没被消费就去查询订单详情怎么办?

可以确定的是订单详情无法查询到,怎么解决呢?可以先将订单缓存在Redis中,在订单被消费后再将缓存更新。