这是我参与「第五届青训营 」笔记创作活动的第5天
系统设计方法论
为什么要做系统设计
对个人来说,可以增加面试中有关系统设计的经验,还能提升个人能力,拓展技术视野。
对于工作来说,系统设计是由业务驱动的。在系统重构中需要进行系统设计。还需要通过系统设计来突破创新。
系统设计的定义是什么
为了达成某种目的,将个体整合成整体的过程。
怎么做系统设计
- 场景分析:什么系统,需要哪些功能,有多大的并发量
- 存储设计:数据如何组织,例如 SQL 还是 NoSQL
- 服务设计:业务功能实现和逻辑整合
- 可扩展性:解决设计缺陷,提高鲁棒性、扩展性
系统功能实现之后,如何分析瓶颈并优化
- 火焰图分析:分析 CPU 时间和内存占用
- 链路追踪:追踪调用的微服务链路
- 性能测试:分析系统的功能缺陷
如何验证系统的可用性和稳定性
- 链路梳理:分析出核心链路和非核心链路,做好优先级
- 可观测性:做好微服务链路追踪,性能监控,业务报警
- 全链路测试:对系统进行包括压力测试、负载测试、容量测试等一系列测试
- 稳定性控制:做好系统的限流、熔断、兜底等稳定措施
- 容灾演练:事先准备好系统故障时的处理措施,制定应急手册和容灾预案
电商秒杀业务介绍
电商介绍
电商的本质是交易。电商需要几个因素:货、人、场。
在电商场景中,人就是消费者,货代表着商家和商品供应链,场就是线上电商平台系统。
商品就是具有交易价值和属性的信息载体。
秒杀业务特点
- 瞬时流量高:几分钟内流量峰值高,其他时间流量较少
- 读多写少:大部分流量都用于查看商品信息和刷新页面,购买商品等写业务较少
- 实时性要求高:客户需要在点击购买之后及时看到结果
秒杀的挑战
- 资源成本:系统的资源是有限的,需要在有限的资源中服务尽可能多的流量
- 高性能:系统需要尽可能快地服务
- 扩展性:秒杀服务需要做到快速扩展,来应对突发流量峰值
- 防止超卖
- 反欺诈:防止黑灰产、黄牛
- 流量管控:在有限的资源中服务有效的流量,剥离非法流量
- 鲁棒性:系统要易用
存储设计
从上到下:Localcache Redis SQL
服务
子服务:
- 用户服务
- 风控服务
- 活动服务
- 订单服务
基础组件:
- 分布式 ID 生成器
- 缓存组件
- MQ 组件
- 限流组件
扩展
- 流量隔离
- CDN
- 缓存优化
- 流量管控
- 数据库扩展
- MQ 扩展
- Redis扩展
- 服务水平扩展
- 服务垂直扩展
课程实践
秒杀流程图: