这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
内容源于青训营课堂视频以及一些文档,若有错误欢迎及时指出
系统设计方法论
- 为什么做系统设计
- 系统设计的定义是什么
- 怎么做系统设计
- 系统功能实现后如何分析瓶颈并优化
- 如何验证系统的可用性和稳定性
为什么要做系统设计
个人:
-
为了面试
-
个人能力提升
-
拓展技术视野
工作:
- 业务驱动
- 系统重构
- 突破与创新
评估一个系统
- 可用性
- 易用性
- 可维护性
- 安全性
- 性能
- 扩展性
- 耦合性
- 伸缩性
系统设计的定义
系统设计是根据系统分析的结果,运用系统科学的思想和方法,设计出能最大限度满足所要求的目标 (或目的) 的新系统的过程。
系统:
- 关联的个体
- 规则运作
- 组成工作的整体
设计:
- 设想和计划
- 目的
- 过程安排
如何做系统设计
场景、存储、服务、扩展
-
场景分析(Scenarion) :什么系统,需要哪些功能,多大的数据量
-
存储设计(Storage) :数据如何组织、Sql存储、NoSql存储
-
服务设计(Service) :业务功能实现和逻辑整合
-
可扩展性(Scale):解决设计缺陷,提高鲁棒性、扩展性
如何发现系统瓶颈
- 火焰图分析:火焰图以全局的视野来看待时间分布,它从底部往顶部,列出所有可能导致性能瓶颈的调用栈。
- 链路追踪:分布式全链路请求调用情况分析
- 全链路压测:基于实际的生产业务场景和系统环境,模拟海量的用户请求和数据,对整个业务链路进行各种场景的测试验证,持续发现并进行瓶颈调优,保障系统稳定性的一个技术工程。
如何保证可用性和稳定性
-
链路梳理
- 核心链路
- 流量漏斗
- 强弱依赖
-
可观测性
- 链路追踪
- 核心监控
- 业务报警
-
全链路测试
- 压力测试
- 负载测试
- 容量测试
-
稳定性控制
- 系统限流
- 业务兜底
- 熔断降级
-
容灾演练
- 混沌工程
- 应急手册
- 容灾预案