系统设计 | 青训营笔记

35 阅读2分钟

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

只不过是字节给我的任务罢了

系统设计

系统设计方法论

  • 为什么要做系统设计

    • 个人能力提升,利于面试
    • 业务驱动
    • 系统重构
    • 突破和创新
  • 如何评估一个系统

    • 可用性、安全性、扩展性、易用性、可维护性、伸缩性、耦合性、性能

系统设计的定义

  • 系统

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

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

如何做系统设计

4S分析法

  • 场景分析

    • 什么系统,需要哪些功能,多大的并发量
  • 存储设计

    • 数据如何组织,SQL存储,NoSQL存储
  • 服务设计

    • 业务功能实现和逻辑整合
  • 可扩展性

    • 解决设计缺陷,提高鲁棒性、扩展性

如何发现系统的缺陷

  • 火焰图分析,对单个实例分析
  • 链路追踪
  • 性能测试

如何保证可用性和稳定性

  • 链路梳理

    • 核心链路:重点保障核心链路,非核心链路降级处理
    • 流量漏斗
    • 强弱依赖
  • 可观测性

    • 链路追踪
    • 核心监控:发现系统的问题
    • 业务报警:对发现的问题进行报警
  • 全链路测试

    • 压力测试:逼近链路临界点,甚至超过
    • 负载测试:准确测试链路的负载
    • 容量测试:测出系统流量的水位
  • 稳定性控制

    • 系统限流:限制流量
    • 业务兜底:下游依赖返回错误,当前的服务可以返回一些兜底的数据
    • 熔断降级
  • 容灾演练

    • 混沌工程:故障注入
    • 应急手册:根据演练出台应急手册
    • 容灾预案:根据演练做出容灾预案

电商秒杀业务

人——货——商场

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

SPU(Standard Product Unit):标准产品单元

SKU(Stock Keeping Unit):库存保持单元

  • 秒杀业务的特点

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

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

如何设计秒杀系统

  • 场景

    • 功能

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

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

    • Localcache
    • Redis
    • MySQL
  • 服务

    • 子服务

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

      • ID生成器
      • 缓存组件
      • MQ组件,削峰,异步,解耦
      • 限流组件
  • 扩展

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

系统架构图

  • 用户层

    • WEB、IOS、Android
  • 接入层

    • Nginx
  • 应用层

    • 发布活动、秒杀详情、秒杀下单
    • ID生成器、限流组件、MQ组件
    • Cache组件
  • 基础层

    • Redis、RocketMQ、MySQL

参考

juejin.cn/post/719438…