系统设计|青训营笔记

101 阅读3分钟

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

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

一、重点知识

  • 系统设计方法论:问题、评估方式、设计要求
  • 电商和秒杀相关内容

二、详细知识点

1. 系统设计方法论

  • 系统设计的问题
    • 为何要做系统设计
    • 定义
    • 怎么做,如何落地
    • 功能实现后如何分析瓶颈并优化
    • 如何验证系统可用性

1.1 为何要做系统设计

  • 个人:系统设计题,个人能力提升,拓展技术视野
  • 工作:业务驱动、系统重构、突破和创新。
  • 解决遇到的问题

1.2 如何评估一个系统

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

1.3 系统设计的定义

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

1.4 如何做系统设计

  • 场景分析 scenario:什么系统、需要哪些功能、多大的吞吐量
  • 存储设计 storage:数据如何组织、sql存储、NoSQL存储
  • 业务设计 service:业务功能实现和逻辑整合
  • 可拓展性 scale:解决设计缺陷、提高鲁棒性、扩展性

1.5 如何发现系统的瓶颈

  • 火焰图分析:找到代码中的瓶颈
  • 链路追踪:对一个请求进行追踪,发现在那个服务耗费时间长
  • 性能测试

1.6 如何保证可用性和稳定性

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

2. 电商与秒杀

2.1 电商

  • 商品:具有交易价值和属性的信息载体
  • 秒杀业务特点:瞬时流量高、读多写少、实时性要求高
  • 秒杀的挑战
    • 高性能:实时性高,性能要求高
    • 拓展性:理想系统扩展性高
    • 鲁棒性:系统的稳定性和可用性达标
    • 资源成本:服务资源有限,需要使用有限资源完成大体量工作
    • 流量管控:商品有限,过滤无用流量
    • 反欺诈:黑灰产进行牟利,如何反欺诈
    • 防止超卖:业务属性重,超卖会发生资产损失

2.2 如何设计秒杀系统

  • 场景
    • 功能
      • 秒杀活动发布
      • 秒杀商品详情
      • 秒杀下单
    • 并发
      • 万人参与
      • QPS 1w+
      • TPS 1k+
  • 存储:MySQL——Redis——LocalCache
  • 服务
    • 子服务
      • 用户服务
      • 风控服务
      • 活动服务
      • 订单服务
    • 基础组件
      • ID生成器
      • 缓存组件
      • MQ组件
      • 限流组件
  • 扩展
    • 流量隔离:与其他非秒杀商品进行隔离防止影响
    • CDN:内容分发网络,静态资源缓存
    • 缓存优化
    • 流量管控
    • 数据库扩展
    • 服务水平扩展
    • MQ扩展
    • Redis扩展
    • 服务垂直扩展

三、课堂总结

本节课主要介绍了系统设计的相关内容。由于课程是一门实践课,有较多的代码讲解。而在课堂快速的讲解中对代码只能简单解析,需要我在课后进一步熟悉相关代码。