这是我参与「第五届青训营」伴学笔记创作活动的第10天
1、系统设计方法论
1.1、为什么要做系统设计——为了去解决我们遇到的一些问题
- 对于个人而言
- 自己的一些面试会问到
- 自己的个人能力提升
- 可以拓展自己技术视野
- 对于工作而言
- 业务驱动
- 系统重构
- 突破和创新
1.2、如何去评估一个系统
可以从以下几个方面来评估:
- 可用性
- 易用性
- 安全性
- 性能
- 可维护性
- 扩展性
- 耦合性
- 伸缩性
1.3、系统设计的定义
我们可以拆成两个词——系统和设计:
系统:关联的个体、规则运作、组成工作的整体
设计:设想和计划、目的、过程安排
所以系统设计的定义:为了达成某种目的,通过个体组成整体的过程
1.3、如何做系统设计
第1步:场景分析(Scenario)
什么系统,需要哪些功能,多大的并发量
第2步:存储设计(Storage)
数据如何组织,Sql存储,NoSql存储
第3步:服务设计(Service)
业务功能实现和逻辑整合
第4步:可扩展性(Scale)
解决设计缺陷,提高鲁棒性、扩展性
1.4、如何发现系统的瓶颈
我们可以通过以下几个方法:
- 火焰图分析
- 链路追踪
- 性能测试
1.4、如何保证可用性和稳定性
- 链路梳理
- 核心链路
- 流量漏斗
- 强弱依赖
- 可观测性
- 链路追踪
- 核心监控
- 业务报警
- 全链路测试
- 压力测试
- 负载测试
- 容量测试
- 稳定性控制
- 系统限流
- 业务兜底
- 熔断降级
- 容灾演练
- 混沌工程
- 应急手册
- 容灾预案
2、秒杀业务介绍
2.1、秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时性要求高
2.2、秒杀业务的挑战
- 资源成本
- 反欺诈
- 高性能
- 防止超卖
- 流量管控
- 扩展性
- 鲁棒性:是在异常和危险情况下系统生存的能力。