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

96 阅读2分钟

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

系统设计方法论

如何评估一个系统: 可用性, 扩展性, 安全性, 易用性, 性能, 耦合性, 可维护性, 伸缩性

系统设计的定义

  • 系统: 关联的个体, 规则运作, 组成工作的整体

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

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

如何做系统设计

4S法则: scenario, storage, service, scale

  • 场景: 什么系统, 需要哪些功能, 多大并发量
  • 存储: 数据如何组织, sql存储, nosql存储
  • 服务: 业务功能实现
  • 可扩展性: 解决设计缺陷, 提高鲁棒性, 扩展性

如何发现系统瓶颈

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

如何保证可用性和稳定性

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

电商秒杀业务

电商介绍

  • 消费者侧
  • 供给侧
  • 交易环境

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

  • SPU: standard product unit 商品基本信息等
  • SKU: stock keeping unit 库存及价格信息

秒杀业务

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

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

4S原则设计秒杀业务

场景

  • 功能: 秒杀活动发布, 秒杀商品详情, 秒杀下单
  • 并发: 万人级并发量, qps 1w+, tps 1k+

存储

mysql, redis, localcache

服务

  • 子服务: 用户服务, 风控服务, 活动服务, 订单服务
  • 基础组件: ID生成器, 缓存组件, MQ组件, 限流组件

扩展

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

服务水平垂直扩展

实践

秒杀流程图

image-20230206111443035.png