系统设计

Entropy Lv4

本文来源于第五届字节跳动青训营活动,已收录到系统设计 | 青训营笔记 - 掘金 (juejin.cn) ,主要记录了对秒杀系统设计的学习

系统设计之秒杀系统

1.系统设计方法论

系统设计的思考问题

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

系统设计的目的

对个人

  • 面试
  • 个人能力提升
  • 拓展技术视野

对工作

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

系统评估角度

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

系统设计的定义

系统

  • 关联的个体
  • 规则运作
  • 组成工作的整体

设计

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

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

系统设计的流程

  • 场景:用什么系统,需要哪些功能,多大的并发量
  • 存储:数据如何组织,SQL 存储,NoSQL 存储
  • 服务:业务功能实现和逻辑整合
  • 扩展:解决设计缺陷,提高鲁棒性、扩展性

系统瓶颈的发现

方法角度

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

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

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

2.电商秒杀业务介绍

电商介绍

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

进一步分析

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

  • 关于电商涉及到两个概念:SPU 和 SKU

    SPU(Standard Product Unit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU

    SKU(Stock Keeping Unit): 库存量单位。SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位

秒杀业务的特点

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

秒杀业务的难点

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

设计秒杀系统

场景(Scenario)
  • 功能:秒杀活动发布、秒杀商品详情、秒杀下单
  • 并发:万人参与秒杀、QPS 1w+、TPS 1k+
存储(Storage)

MySQL —> Redis —> Localcache

服务(Service)
  • 子服务:用户服务、风控服务、活动服务、订单服务

  • 基础组件:ID 生成器、缓存组件、MQ 组件、限流组件

扩展(Scale)
  • 流量隔离、CDN、缓存优化、流量管控(例如基于速率或信号控制、限流、拦截、过滤以及设置机房流量配比等)
  • 数据库扩展、服务·水平扩展、MQ 扩展、Redis 扩展、服务垂直扩展

系统架构

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

3.实践

流程图

4.总结

  • 服务无状态

  • 批量写入

  • 最终一致性

参考资料

鲁棒性的含义以及如何提高模型的鲁棒性 - 知乎 (zhihu.com)

浅谈电商中的spu和sku - 知乎 (zhihu.com)

  • 标题: 系统设计
  • 作者: Entropy
  • 创建于 : 2023-02-06 20:37:26
  • 更新于 : 2023-04-01 07:55:52
  • 链接: https://www.entropy-tree.top/2023/02/06/golang-day10/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论