手把手教你做系统设计 | 青训营笔记

94 阅读3分钟

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

系统设计方法论

为什么要做系统设计

对个人来说,可以增加面试中有关系统设计的经验,还能提升个人能力,拓展技术视野。

对于工作来说,系统设计是由业务驱动的。在系统重构中需要进行系统设计。还需要通过系统设计来突破创新。

系统设计的定义是什么

为了达成某种目的,将个体整合成整体的过程。

怎么做系统设计

  1. 场景分析:什么系统,需要哪些功能,有多大的并发量
  2. 存储设计:数据如何组织,例如 SQL 还是 NoSQL
  3. 服务设计:业务功能实现和逻辑整合
  4. 可扩展性:解决设计缺陷,提高鲁棒性、扩展性

系统功能实现之后,如何分析瓶颈并优化

  • 火焰图分析:分析 CPU 时间和内存占用
  • 链路追踪:追踪调用的微服务链路
  • 性能测试:分析系统的功能缺陷

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

  • 链路梳理:分析出核心链路和非核心链路,做好优先级
  • 可观测性:做好微服务链路追踪,性能监控,业务报警
  • 全链路测试:对系统进行包括压力测试、负载测试、容量测试等一系列测试
  • 稳定性控制:做好系统的限流、熔断、兜底等稳定措施
  • 容灾演练:事先准备好系统故障时的处理措施,制定应急手册和容灾预案

电商秒杀业务介绍

电商介绍

电商的本质是交易。电商需要几个因素:货、人、场。

在电商场景中,人就是消费者,货代表着商家和商品供应链,场就是线上电商平台系统。

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

秒杀业务特点

  • 瞬时流量高:几分钟内流量峰值高,其他时间流量较少
  • 读多写少:大部分流量都用于查看商品信息和刷新页面,购买商品等写业务较少
  • 实时性要求高:客户需要在点击购买之后及时看到结果

秒杀的挑战

  • 资源成本:系统的资源是有限的,需要在有限的资源中服务尽可能多的流量
  • 高性能:系统需要尽可能快地服务
  • 扩展性:秒杀服务需要做到快速扩展,来应对突发流量峰值
  • 防止超卖
  • 反欺诈:防止黑灰产、黄牛
  • 流量管控:在有限的资源中服务有效的流量,剥离非法流量
  • 鲁棒性:系统要易用

存储设计

从上到下:Localcache Redis SQL

服务

子服务:

  • 用户服务
  • 风控服务
  • 活动服务
  • 订单服务

基础组件:

  • 分布式 ID 生成器
  • 缓存组件
  • MQ 组件
  • 限流组件

扩展

  • 流量隔离
  • CDN
  • 缓存优化
  • 流量管控
  • 数据库扩展
  • MQ 扩展
  • Redis扩展
  • 服务水平扩展
  • 服务垂直扩展

课程实践

秒杀流程图:

image.png