这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
系统设计方法论
谈到系统设计,我们会有哪些问题呢?
-
为什么要做系统设计
-
系统设计的定义是什么
-
怎么做系统设计,如何落地—个系统
-
系统功能实现之后,如何分析瓶颈并优化
- 火焰图分析
- 链路追踪
- 性能测试
-
如何验证系统的可用性和稳定性
-
链路梳理
- 核心链路
- 流量漏斗
- 强弱依赖(核心链路予以更强保证,弱依赖可以做降级处理)
-
可观测性
- 链路追踪(对一次请求在微服务上的全过程追踪)
- 核心监控
- 业务报警
-
全链路测试
- 压力测试(压力测试(又叫强度测试)也是一种性能测试,它在系统资源特别低的情况下软件系统运行情况,目的是找到系统在哪里失效以及如何失效的地方)
- 负载测试(负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。 关注点:how much)
- 容量测试(确定系统可处理同时在线的最大用户数 关注点:how much(而不是how fast) 容量测试,通常和 数据库 有关,容量和负载的区别在于:容量关注的是大容量,而不需要关注使用中的实际表现。)
-
稳定性控制
-
系统限流
-
业务兜底(当服务出现错误,仍可以返回合法数据)
-
熔断降级
相关解释
- 熔断:当错误数超过阈值时快速失败,不调用后端服务,同时隔一定时间放几个请求去重试后端服务是否能正常调用,如果成功则关闭熔断状态,失败则继续快速失败,直接返回。(此处有个重试,重试就是弹性恢复的能力)
- 隔离:把每个依赖或调用的服务都隔离开来,防止级联失败引起整体服务不可用
- 降级:服务失败或异常后,返回指定的默认信息
-
-
容灾演练
- 混沌工程(通过故障注入等方式进行演练)
- 应急手册(通过混沌工程进行总结)
- 容灾预案
-
-
如何评估一个系统
- 可用性
- 扩展性
- 安全性
- 易用性
- 耦合性
- 性能
- 可维护性
- 伸缩性
如何做系统设计
主要以下四步:
场景分析(Scenario)
什么系统,需要哪些功能,多大的并发量
存储设计(Storage)
数据如何组织,Sq|存储, NoSq|存储
服务设计(Service)
业务功能实现和逻辑整合
可扩展性(Scale)
解决设计缺陷,提高鲁棒性、扩展性