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

101 阅读3分钟

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

前言

本文章会部分详细地了解系统设计的方法论和秒杀系统实践,让我们能更好得入门系统设计。

系统设计方法论

为什么做系统设计

个人:

  • 为了面试

  • 个人能力提升

  • 拓展技术视野

工作:

  • 业务驱动
  • 系统重构
  • 突破与创新

如何评估一个系统

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

系统设计的定义

  • 系统设计的定义:为了达成某种目的,通过个体组成整体的过程

    • 系统:关联的个体,规则运作,组成工作的整体
    • 设计:设想和计划;目的;过程安排

如何做系统设计

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

如何发现系统的瓶颈

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

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

  • 链路梳理:核心链路,流量漏斗,强弱依赖
  • 可观测性:链路追踪,核心监控,业务报警
  • 全链路测试:压力测试,负载测试,容量测试
  • 稳定性控制:系统限流,业务兜底,熔断降级
  • 容灾演练:混沌工程,应急手册,容灾预案

电商秒杀业务介绍

电商介绍

  • 商品:具有交易价值和属性的信息载体
  • SPU:Standard Product Unit (标准化产品单元),是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了商品的特性。
  • SKU:Stock keeping unit(库存量单位),主要是用来定价和管理库存。SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位。SKU是物理上不可分割的最小存货单元。

秒杀业务的特点

  • 瞬时流量高
  • 读多写少
  • 实时性要求高

秒杀的挑战

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

设计秒杀系统

  • 场景

    • 功能:

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

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

    • localcache
    • redis
    • mysql

    采用三级存储,最底层是MySQL,为了提高性能,在这之上是redis的分布式缓存,最顶层的则是系统内部的Localcahe

  • 服务

    • 子服务

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

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

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

系统架构图

image.png

课程实践

秒杀流程图

image.png

课程总结

  • 服务无状态
  • 批量写入
  • 最终一致性

引用

  • 「【实践课】手把手教你做系统设计」第五届字节跳动青训营 - 后端专场