系统设计 | 青训营笔记

97 阅读3分钟

系统设计

系统设计方法论

评估一个系统设计的所涉及的方面

  • 可用性
  • 易用性
  • 安全性
  • 可维护性
  • 性能
  • 扩展性
  • 耦合性
  • 伸缩性

系统设计的定义

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

系统 - 关联的个体 规则运作 组成工作的整体 设计 - 设想和计划 目的 过程安排

系统设计的流程

  1. 场景分析Scenario(什么系统以及系统功能还有多大的并发量)
  2. 存储设计Storage(数据的组织方式 - Sql 存储/ Nosql存储)
  3. 服务的组织Service(业务功能的实现和逻辑整合)
  4. 可扩展性Scale(解决设计的缺陷性,提高鲁棒性和扩展性)

发现系统瓶颈的方式

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

保证系统的可用性以及稳定性

  • 链路梳理
    • 核心的链路
    • 流量漏斗
    • 强弱依赖
  • 可观测性
    • 链路追踪
    • 核心监控
    • 业务报警
  • 全链路测试
    • 压力测试
    • 负载测试
    • 容量测试
  • 稳定性测试
    • 系统限流
    • 业务兜底
    • 熔断降级
  • 容灾演练
    • 混沌工程
    • 应急手册
    • 容灾预案

电商秒杀业务介绍

我们需要从三个方面对系统设计考虑,在消费者的方面的话我们需要考量消费者、用户以及流量的来源,在环境场地方面的话我们应该考虑线下商场以及线上电商的情况,在货物供应方面我们首先考虑的就是商品商家以及产品的供应链

Note: 商品是作为一种具有交易价值和属性的载体

秒杀业务的特点

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

在秒杀我们需要考量商品的超卖问题,服务的高性能、扩展性、鲁棒性以及对流量的监控,还有对黑灰产方面的反欺诈以及对于运营资源的成本考虑

场景

在秒杀的场景方面我们主要的功能考虑是秒杀活动的发布、秒杀商品的详情以及秒杀下单,在服务的并发方面-人员的参与往往是万人以上,QPS 基本在 1w+,TPS 则是 1k+

存储

我们可以先设计访问本地的缓存(从Redis中获取),而缓存的数据我们可以从关系型数据库中获取,设计数据库之间各个表的联系

服务

在服务方面,我们可以把整个服务划分为子服务以及基础组件进行组成

子服务

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

基础组件

  • ID生成器
  • 缓存组件
  • MQ(组件) - 消息队列
  • 限流组件

扩展

在扩展方面我们可以根据情况对存储和服务进行扩展,为了我们的服务更加快地为用户服务我们可以对CDN进行扩充,用户数据增大地话我们就需要对数据存储进行扩展,还有其他地一些流量管控 流量隔离 MQ扩展等

系统的架构

20230219212137.png