这是我参与「第五届青训营 」笔记创作活动的第 11 天
系统设计方法论
我们学习一个东西,首先需要认识是什么、为什么、怎么做,只有我们学会如何多多向自己提出问题,发现问题,解决问题,才能更快地成长、学习。
- 为什么要做系统设计?
- 系统设计的定义是什么?
- 怎么做系统设计,如何落地一个系统设计?
- 系统功能实现之后,如何分析瓶颈并优化?
- 如何验证系统的可用性和稳定性?
为什么要做系统设计
为什么要做系统设计?
我们从两个层面来回答这个问题
首先,对于个人来说:
- 系统设计有助于帮助我们进行面试
- 学习系统设计能够提升个人能力
- 系统设计可以帮助我们开拓技术视野
其次,对于工作来说:
- 系统设计可以帮助进行业务驱动
- 好的系统设计能够更好的进行重构和扩展
- 系统设计也可以帮助我们突破一些瓶颈,实现突破和创新
总的来说,系统设计是为了帮助我们来更好地解决问题的。
系统设计的定义是什么
要想理解系统设计的概念,我们先从系统出发
我们应该如何评估一个系统呢?
评估一个系统可以从很多个角度出发:可用性、安全性、扩展性、易用性、性能、耦合性、可维护性、伸缩性等等
而系统设计的定义可以分为系统和设计两个方面:
- 系统:
- 关联的个体
- 规则运作
- 组成工作的整体
- 设计:
- 设想和计划
- 目的
- 过程安排
综上所述,系统设计就是一个为了达成某种目的,通过个体组成整体的过程
如何进行系统设计
系统设计有标准的流程吗?
答案是有的:
场景 -> 存储 -> 服务 -> 扩展
而同时我们也需要对需求进行分析:
- 什么系统,需要哪些功能,多大的并发量
- 数据如何组织,Sql存储,NoSql存储
- 业务功能实现和逻辑整合
- 解决设计缺陷,提高鲁棒性,扩展性
如何分析瓶颈并优化
同时呢,在整个系统中也需要进行一定的监控和分析,这里我们就需要学习:
- 火焰图分析
- 链路追踪
- 性能测试
- 等等知识
通过这些知识我们可以对整个系统进行监控,分析系统的瓶颈,更好地进行系统设计
如何保证可用性和稳定性
可用性和稳定性主要体现在下面几个方面中:
- 链路追踪
- 核心链路
- 流量漏斗
- 强弱依赖
- 可观测性
- 链路追踪
- 核心监控
- 业务报警
- 全链路测试
- 压力测试
- 负载测试
- 容量测试
- 稳定性控制
- 系统限流
- 业务兜底
- 熔断降级
- 容灾演练
- 混沌工程
- 应急手册
- 容灾预案
引用参考
手把手教你做系统设计之秒杀系统 .pptx - 飞书云文档 (feishu.cn)