这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
课程内容
- 系统设计方法论
- 电商秒杀业务介绍
- 课程实践
- 课程总结
系统设计方法论
原因
- 对于个人而言,做系统设计能提高个人对系统的宏观把控能力,比如我每次做那种有教程的项目的时候会想每个层面大概用的是什么技术栈,优势与劣势是什么,有什么替代品或者优化产物等等,依此拓展技术视野。这样在面试问项目内容的时候,也方便展开介绍
- 对于工作方面,做系统设计一方面来自于新业务的驱动力:如现有的业务逻辑无法高效率的达成目标;一方面是对旧代码系统的维护更新重构:如重新考虑微服务划分与解耦;还有就是实现一些突破或者创新的理念时,往往单纯的增删技术栈无法达到,这时候就需要对整体系统进行设计再规划。
评估指标
评估指标的数据和特性有很多,往往取决于你的业务目的或者系统理念,如可用性,易用性可维护性;安全性,扩展性,耦合性,伸缩性等等
定义
-
系统:
- 关联的个体
- 规则运作
- 组成工作的整体
-
设计:
- 设想和计划
- 目的
- 过程安排
为了达成某种目的,通过个体组成整体的过程,称为系统设计
标准流程
①场景分析(Scenario)
- 什么业务背景的系统
- 需要考虑哪些功能
- 并发量的估计
如设计一个秒杀商城的话,重点考虑的就是高并发和秒杀操作的实现,做一个停车/安保系统,重点考虑的就是安全或保密性的问题
②存储设计(Storage)
- 数据组织方式,结构
- Sql存储
- NoSql存储
比如考虑商城商品的信息用什么形式存储,哪些数据需要频繁读取但更改少考虑NoSql,哪些数据不经常读取但是频繁改考虑Sql,在高并发下的缓存设计等等
③服务设计(Service)
- 业务功能实现
- 业务逻辑整合
用什么框架对开发业务效率有提高,拆分哪些业务逻辑为rpc调用,整合哪些业务逻辑为微服务~~
④可拓展性
- 解决设计缺陷,提高鲁棒性,扩展性
"鲁棒性”原是统计学中的一个专门术语,从上世纪70年代初开始,逐渐引入到控制理论的研究中,用以表征控制系统对特性或参数扰动的不敏感性。就是系统的健壮性。它是在异常和危险情况下系统生存的关键。根据对性能的不同定义,可分为稳定鲁棒性和性能鲁棒性
测试系统瓶颈
- 火焰图分析
- 链路追踪
- 性能测试
保证可用性和稳定性
- 链路梳理:核心链路,流量漏斗,强弱依赖
- 可观测性:链路追踪,核心监控,业务报警
- 全链路测试:压力测试,负载测试,容量测试
- 稳定性控制:系统限流,业务兜底,熔断降级
- 容灾演练:混沌工程,应急手册,容灾预案
个人总结
系统设计的理论知识不少,暂且分上下篇,下篇再结合具体实践剖析系统设计;上篇主要是分析和结合实际对理论进行总结。