系统设计
系统设计方法论
评估一个系统设计的所涉及的方面
- 可用性
- 易用性
- 安全性
- 可维护性
- 性能
- 扩展性
- 耦合性
- 伸缩性
系统设计的定义
为了达成某种目的,通过个体组成整体的过程
系统 - 关联的个体 规则运作 组成工作的整体 设计 - 设想和计划 目的 过程安排
系统设计的流程
- 场景分析Scenario(什么系统以及系统功能还有多大的并发量)
- 存储设计Storage(数据的组织方式 - Sql 存储/ Nosql存储)
- 服务的组织Service(业务功能的实现和逻辑整合)
- 可扩展性Scale(解决设计的缺陷性,提高鲁棒性和扩展性)
发现系统瓶颈的方式
- 火焰图分析
- 链路追踪
- 性能测试
保证系统的可用性以及稳定性
- 链路梳理
- 核心的链路
- 流量漏斗
- 强弱依赖
- 可观测性
- 链路追踪
- 核心监控
- 业务报警
- 全链路测试
- 压力测试
- 负载测试
- 容量测试
- 稳定性测试
- 系统限流
- 业务兜底
- 熔断降级
- 容灾演练
- 混沌工程
- 应急手册
- 容灾预案
电商秒杀业务介绍
我们需要从三个方面对系统设计考虑,在消费者的方面的话我们需要考量消费者、用户以及流量的来源,在环境场地方面的话我们应该考虑线下商场以及线上电商的情况,在货物供应方面我们首先考虑的就是商品商家以及产品的供应链
Note: 商品是作为一种具有交易价值和属性的载体
秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时性要求高
在秒杀我们需要考量商品的超卖问题,服务的高性能、扩展性、鲁棒性以及对流量的监控,还有对黑灰产方面的反欺诈以及对于运营资源的成本考虑
场景
在秒杀的场景方面我们主要的功能考虑是秒杀活动的发布、秒杀商品的详情以及秒杀下单,在服务的并发方面-人员的参与往往是万人以上,QPS 基本在 1w+,TPS 则是 1k+
存储
我们可以先设计访问本地的缓存(从Redis中获取),而缓存的数据我们可以从关系型数据库中获取,设计数据库之间各个表的联系
服务
在服务方面,我们可以把整个服务划分为子服务以及基础组件进行组成
子服务
- 用户服务
- 风控服务
- 活动服务
- 订单服务
基础组件
- ID生成器
- 缓存组件
- MQ(组件) - 消息队列
- 限流组件
扩展
在扩展方面我们可以根据情况对存储和服务进行扩展,为了我们的服务更加快地为用户服务我们可以对CDN进行扩充,用户数据增大地话我们就需要对数据存储进行扩展,还有其他地一些流量管控 流量隔离 MQ扩展等
系统的架构