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

121 阅读2分钟

这是我参与「第五营」笔记创作活动的的第12天

手把手教你做系统设计

系统设计方法论

为什么要做系统设计

个人

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

工作

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

系统设计的定义

系统

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

如何评估一个系统:可用性、扩展性、安全性、易用性、可维护性、性能、耦合性、伸缩性

设计

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

定义:为了达成某种目的,通过个体组成整体的过程

如何做系统设计 —— 4S分析法

  • 场景分析 (Scenario):什么系统,需要哪些功能,多大的并发量
  • 存储设计 (Storage):数据如何组织,Sql存储,NoSql存储
  • 服务设计 (Service):业务功能实现和逻辑整合
  • 可扩展性 (Scale):解决设计缺陷,提高鲁棒性、扩展性

如何发现系统的瓶颈

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

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

链路梳理

  • 核心链路
  • 流量漏斗
  • 强弱依赖

可观测性

  • 链路追踪
  • 核心监控
  • 业务报警

全链路测试

  • 压力测试
  • 负载测试
  • 容量测试

稳定性控制

  • 系统限流
  • 业务兜底
  • 熔断降级

容灾演练

  • 混沌工程
  • 应急手册
  • 容灾预案

电商秒杀业务介绍

基本概念

SPU: Standard Product Unit

SKU: Stock Keeping Unit

特点:

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

挑战: 资源有限性、反欺诈、高性能、防止超卖、流量管控、扩展性、鲁棒性

设计秒杀系统

4S分析

场景

功能

  • 秒杀活动发布
  • 秒杀商品详情
  • 秒杀下单

并发

  • 万人参与秒杀
  • QPS 1w+
  • TPS 1k+

存储 image.png

image.png

功能 子服务

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

基础组件

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

扩展

snapedit_1675583578810.jpg

系统架构图

image.png

课程实践

系统流程图

snapedit_1675584053609.jpg

课程总结

服务无状态:当前的应用服务不存储状态和数据。

批量写入:在一些高QPS的接口和非常大数据量的MySql写入,能够有效降低系统压力,例如MySql中的“组提交”。

最终一致性:解释了用Redis做缓存以及用MQ。