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

156 阅读3分钟

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

系统设计之秒杀系统

系统设计方法论

关于系统设计的一些问题

  • 为什么要做系统设计?

    业务驱动、对现有系统重构以满足业务需求、业务上的突破和创新(例如直播电商与传统电商的区别)

  • 系统设计的定义是什么?

  • 怎么做系统设计并落地?

  • 在系统功能实现后,如何分析瓶颈并优化?

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

如和做系统设计?

可以按照如下的流程进行:

  1. 场景分析(Scenario)

    是一个什么样的系统?需要哪些功能?并发量如何?

  2. 存储设计(Storage)

    数据如何组织、采用传统SQL还是NoSQL?

  3. 服务设计(Service)

    业务功能的实现以及逻辑整合

  4. 可扩展性设计(Scale)

    解决设计缺陷、提高健壮性与扩展性

以上的方法也称为系统设计的4S分析法。

如何发现系统的瓶颈?

  • 火焰图分析

    针对单个实例的分析,找到代码上的一些瓶颈

  • 链路追踪

    在微服务中,追踪一个请求经过了哪些服务,分析出哪个服务的耗时占比比较大

  • 性能测试

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

  • 链路梳理:梳理出核心链路并加强保障
  • 可观测性:追踪、监控、业务报警
  • 全链路测试:压力测试、负载测试和容量测试(容量水位)
  • 稳定性控制:包括限流、业务兜底(下游错误时返回一些兜底数据)和熔断降级等。
  • 容灾演练:混沌工程、应急手册、容灾预案

电商秒杀业务介绍

电商业务的介绍

交易业务的三个要素:

  • 供给侧:商品、商家、供应链
  • 消费者侧:消费者、用户、流量源
  • 交易环境:线下商场&线上电商

秒杀业务的特点有哪些?

  • 瞬时流量高
  • 读多写少:秒杀业务中用户会不停刷新查看商品
  • 实时性要求高

秒杀业务的挑战有哪些?

  • 资源成本(用有限的资源完成目标)
  • 反欺诈(防黑产、黄牛党)
  • 高性能(实时性要求高)
  • 防止超卖
  • 流量管控
  • 扩展性
  • 健壮性

如何设计一个秒杀系统?

系统设计分析

从4S分析法出发:

  • Scenario 场景

    • 需要实现的功能:秒杀活动发布、秒杀商品详情、秒杀下单
    • 满足并发要求:万人参与秒杀、QPS 1W+、TPS 1K+
  • Storage 存储

    三级存储:

    • Localcache
    • Redis
    • MySQL(数据库表的设计)
  • Service 服务

    • 子服务:

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

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

    • 流量隔离(秒杀商品与常规商品隔离)、CDN、缓存优化、流量管控
    • 数据库扩展(读写分离、分库分表)、MQ扩展、Redis扩展
    • 服务水平扩展(负载均衡、反向代理)、服务垂直扩展(对服务进行微服务拆分)

架构层次划分

一个秒杀系统可以设计成如下的层次:

用户层WEB IOS Android
接入层Nginx
应用层发布活动 秒杀详情 秒杀下单 ID生成器 限流组件 MQ组件 CACHE组件
基础层Redis MySQL RocketMQ