这是我参与「第五届青训营 」笔记创作活动的第12天
只不过是字节给我的任务罢了
系统设计
系统设计方法论
-
为什么要做系统设计
- 个人能力提升,利于面试
- 业务驱动
- 系统重构
- 突破和创新
-
如何评估一个系统
- 可用性、安全性、扩展性、易用性、可维护性、伸缩性、耦合性、性能
系统设计的定义
-
系统
- 关联的个体
- 规则运作
- 组成工作的整体
-
设计
- 设想和计划
- 目的
- 过程安排
如何做系统设计
4S分析法
-
场景分析
- 什么系统,需要哪些功能,多大的并发量
-
存储设计
- 数据如何组织,SQL存储,NoSQL存储
-
服务设计
- 业务功能实现和逻辑整合
-
可扩展性
- 解决设计缺陷,提高鲁棒性、扩展性
如何发现系统的缺陷
- 火焰图分析,对单个实例分析
- 链路追踪
- 性能测试
如何保证可用性和稳定性
-
链路梳理
- 核心链路:重点保障核心链路,非核心链路降级处理
- 流量漏斗
- 强弱依赖
-
可观测性
- 链路追踪
- 核心监控:发现系统的问题
- 业务报警:对发现的问题进行报警
-
全链路测试
- 压力测试:逼近链路临界点,甚至超过
- 负载测试:准确测试链路的负载
- 容量测试:测出系统流量的水位
-
稳定性控制
- 系统限流:限制流量
- 业务兜底:下游依赖返回错误,当前的服务可以返回一些兜底的数据
- 熔断降级
-
容灾演练
- 混沌工程:故障注入
- 应急手册:根据演练出台应急手册
- 容灾预案:根据演练做出容灾预案
电商秒杀业务
人——货——商场
商品: 具有交易价值和属性的信息载体
SPU(Standard Product Unit):标准产品单元
SKU(Stock Keeping Unit):库存保持单元
-
秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时性要求高
-
秒杀的挑战
- 资源成本
- 反欺诈
- 高性能
- 防止超卖
- 流量管控
- 扩展性
- 鲁棒性
如何设计秒杀系统
-
场景
-
功能
- 秒杀活动发布
- 秒杀商品详情
- 秒杀下单
-
并发
- 万人参与秒杀
- QPS 1w+
- TPS 1k+
-
-
存储
- Localcache
- Redis
- MySQL
-
服务
-
子服务
- 用户服务
- 风控服务
- 活动服务
- 订单服务
-
基础组件
- ID生成器
- 缓存组件
- MQ组件,削峰,异步,解耦
- 限流组件
-
-
扩展
- 流量隔离
- CDN
- 缓存优化
- 流量管控
- 数据库扩展
- MQ扩展
- Redis扩展
- 服务水平扩展
- 服务垂直扩展
系统架构图
-
用户层
- WEB、IOS、Android
-
接入层
- Nginx
-
应用层
- 发布活动、秒杀详情、秒杀下单
- ID生成器、限流组件、MQ组件
- Cache组件
-
基础层
- Redis、RocketMQ、MySQL