手把手教你做系统设计 | 青训营笔记

128 阅读2分钟

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

手把手教你做系统设计之秒杀系统

系统设计方法论

定义

  • 很多问题:

    • why 系统设计
    • 定义 of 系统设计
    • 怎样做系统设计,落地一个系统
    • 系统功能实现之后,如何分析瓶颈并优化
    • 如何验证系统的可用性和稳定性
  • why 系统设计:

    • 个人:

      • 面试
      • 个人能力提升
      • 拓宽技术视野
    • 工作:

      • 业务驱动
      • 系统重构
      • 突破和创新
  • 系统设计的定义:

    • 系统:

      • 关联的个体
      • 规则运作
      • 组成工作的整体
    • 设计:

      • 设想和计划
      • 目的
      • 过程安排

定义:为了达成某种目的, 通过个体组成整体的过程

流程&范式

系统设计有标准的流程吗?有!场景,存储,服务,拓展四个大方面分析!

  • 4S分析法

    • 场景分析( Scenario ) 什么系统,需要哪些功能,多大的并发量
    • 存储设计( Storage ) 数据如何组织, Sq|存储,NoSq|存储
    • 服务设计( Service ) 业务功能实现和逻辑整合
    • 可扩展性(Scale) 解决设计缺陷,提高鲁棒性、扩展性
  • 如何发现系统的瓶颈:

    • 火焰图分析
    • 链路追踪
    • 性能测试

如何保证可用性和稳定性

  • 链路梳理:

    • 核心链路
    • 流量漏斗
    • 强弱依赖
  • 可观测性:

    • 链路追踪
    • 核心监控
    • 业务报警
  • 全链路测试:

    • 压力测试
    • 负载测试
    • 容量测试
  • 稳定性控制:

    • 系统限流
    • 业务兜底
    • 熔断降级
  • 容灾演练:

    • 混沌工程
    • 应急手册
    • 容灾预案

电商秒杀业务介绍

  • 电商介绍:

image-20230203101659209

商品:具有交易价值和属性的信息载体

  • SPU: Standard Product Unit
  • SKU: Stock Keeping Unit
  • 秒杀业务的特点:

    • 瞬时流量高
    • 读多写少
    • 实时性要求高
  • 秒杀的挑战:

    • 资源成本
    • 反欺诈
    • 防止超卖
    • 流量管控
    • 高性能
    • 拓展型
    • 鲁棒性

    ...

场景(Scenario)

  • 功能:

    • 秒杀活动发布
    • 秒杀商品详情
    • 秒杀下单
  • 并发:

    • 万人参与秒杀
    • QPS 1w+
    • TPS 1k+

存储(Storage)

  • 三级:

    • MySQL, Redis, Localcache

MySQL -> Redis -> Localcache

image-20230203102653467

服务(Service)

  • 子服务

    • 用户服务
    • 风控服务
    • 活动服务
    • 订单服务
  • 基础组件:

    • ID生成器
    • 缓存组件
    • MQ组件
    • 限流组件

拓展(Scale)

  • 好多扩展:

    • 流量隔离
    • CDN
    • 缓存优化
    • 流量管控
    • 数据库扩展
    • MQ扩展
    • Redis扩展
    • 服务水平扩展
    • 服务垂直扩展

系统架构图

img

课程实践

  • 秒杀流程:

img

课程总结

References

  1. 课程文档:juejin.cn/post/719438…
  2. golang mock: geektutu.com/post/quick-…