这是我参与「第五届青训营 」笔记创作活动的第6天
今天去西西弗书店,正好在《技术大全》中翻到了这么一句话:
并不存在所谓的“简单系统”。
在我看来,这句话实际上是告诉我们所有的系统都有其复杂性,而我们构建更复杂系统的方法,就是不断复用那些我们更熟悉的系统。
系统设计的流程
课程给了我们一个比较普适的系统设计流程。
- 场景分析(Scenario)
- 存储设计(Storage)
- 服务设计(Service)
- 可扩展性(Scale)
也称4S设计流程。
同样的,我们在读一些项目的时候,也可以按照这样的流程去解读。
保证可用性和稳定性
人是会犯错的,必须使用工具和规范才能尽可能保证高可用。
链路梳理
- 核心链路
- 流量漏斗
- 强弱依赖
可观测性
- 链路追踪
- 核心监控
- 业务报警
全链路测试
- 压力测试
- 负载测试
- 容量测试
稳定性控制
- 系统限流
- 业务兜底
- 熔断降级
容灾演练
- 混沌工程
- 应急手册
- 容灾预案
电商
SPU: Standard Product Unit SKU: Stock Keeping Unit
代码解读
整个项目的结构是中规中矩的单体应用。课程花费大量的时间聚焦于数据的维护。由于秒杀应用的特性,在设计存储时需要设计好哪些数据应该在redis,哪些应该在mysql,哪些应该在localStorage。这是根据业务的场景和需求来分析的。
当然,分析会有出错的时候。这就需要使用压力测试等工具来查看系统是否存在没有考虑到的漏洞了。
代码中还使用了MQ等中间件。MQ主要提供了削峰、缓存的功能,但我对其并没有更深入的了解。也许之后用到了可以多了解一下。
测试
JMeter
压测工具。可以模拟多个线程循环执行,同时统计耗时、负载、吞吐量等。