这是我参与[第五届青训营]伴学笔记创作活动的第 10 天
系统设计方法论
系统设计的定义
为了达成某种目的,通过个体组成整体的过程 系统
- 关联的个体
- 规则运作
- 组成工作的整体
设计
- 设想和计划
- 目的
- 过程安排
系统设计流程
- 场景分析(Scenario):什么系统,需要哪些功能,多大的并发量
- 存储设计(Storage):数据如何组织,Sql存储,NoSql存储
- 服务设计(Service):业务功能实现和逻辑整合
- 可扩展性(Scale):解决设计缺陷,提高鲁棒性、扩展性
如何发现系统的瓶颈
火焰图分析、链路追踪、性能测试
如何保证可用性和稳定性
- 链路梳理:核心链路、流量漏斗、强弱依赖
- 可观测性:链路追踪、核心监控、业务报警
- 全链路测试:压力测试、负载测试、容量测试
- 稳定性控制:系统限流、业务兜底、熔断降级
- 容灾演练:混沌工程、应急手册、容灾预案
电商秒杀业务
商品:具有交易价值和属性的信息载体
SPU(Standard Product Unit): 标准化产品单元,是商品信息聚合的最小单位,属性值、特性相同的商品就可以成为一个SPU
SKU(Stock Keeping Unit): 库存量单位,SKU是用来定价和管理库存的
秒杀业务特点
- 瞬时流量高
- 读多写少
- 实时性要求高
秒杀的挑战
资源成本、反欺诈、高性能、防止超卖、流量管控、扩展性、鲁棒性
如何设计秒杀系统
场景
TPS(Transactions Per Second):每秒事务数,TPS 是软件测试结果的测量单位。我们在进行服务性能压测时,接口层面最常关注的是最大 TPS 以及接口响应时间,个人理解 TPS 可以指一组逻辑相关的请求,而服务整体处理能力取决于处理能力最低模块的TPS值
QPS(Queries Per Second):意思是每秒查询率。指一台服务器每秒能够响应的查询次数,用于衡量特定的查询服务器在规定时间内所处理流量多少,主要针对专门用于查询的服务器的性能指标
功能
- 秒杀活动发布
- 秒杀商品详情
- 秒杀下单
并发
- 万人参与秒杀
- QPS 1w+
- TPS 1k+
存储
MYSQL -> Redis -> Localcache
服务
子服务
- 用户服务
- 风控服务
- 活动服务
- 订单服务
基础组件
- ID生成器
- 缓存组件
- MQ组件
- 限流组件
扩展
流量隔离、CDN、缓存优化、流量管控、数据库扩展、MQ扩展、Redis扩展、服务水平扩展、服务垂直扩展