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

98 阅读2分钟

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

1. 系统设计方法论

1.1 系统设计的那些问题

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

1.2 为什么要做系统设计

个人工作
For面试业务驱动
个人能力提升系统重构
拓展技术视野突破和创新

1.3 如何评估一个系统

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

1.4 系统设计的定义

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

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

1.5 如何做系统设计😎

  1. 场景分析(Scenario)

什么系统,需要哪些功能,多大的并发量

  1. 存储设计(Storage) 数据如何组织,Sql存储,NoSql存储

  2. 服务设计(Service)

业务功能实现和逻辑整合

  1. 可扩展性(Scale) 解决设计缺陷,提高鲁棒性、扩展性

发现系统瓶颈:火焰图、链路追踪、性能测试

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

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

2. 电商秒杀业务介绍

2.1 电商介绍

image-20230214194504105

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

SPU:Standard Product Unit

SKU:Stock Keeping Unit

2.2 秒杀业务的特点

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

2.3 秒杀的挑战

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

2.4 如何设计秒杀系统😎

1、场景

功能:

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

并发:

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

2、存储

localcache <-- redis <-- mysql

image-20230214195250291

3、服务

子服务:

  • 用户服务
  • 风控服务
  • 活动服务
  • 订单服务

基础组件:

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

4、扩展

流量隔离、CDN、缓存优化、流量管控

数据库扩展、Redis扩展、MQ扩展、服务水平扩展、服务垂直扩展

系统架构图:

image-20230214195530988

3. 课程实践

image-20230214195602437