知识卡片
X系统与S系统的三阶段分段实施策略对比
内容
成立”X项目”后,团队在原来整理的问题基础上,重新识别出X系统架构的核心复杂度体现在:庞大的系统集成了太多功能,导致可扩展性不足;但当时系统的可用性也不高,经常出线上问题,耗费大量人力去处理。团队据此判断:要做架构重构,需要系统先处于一个比较稳定的状态,不能经常出线上问题;而当时可用性不高,一部分是硬件资源不够用、部分系统组件使用不合理,一部分是架构本身有问题。基于这个分析,团队制定了三阶段策略:第一阶段先”救火”,解决因机器过载、缓存响应慢、虚拟机挂死等直接导致故障的问题;第二阶段解决因组件、外部系统故障导致系统故障的问题(例如把多个底层系统切换到公司统一的公共组件),提升整体可用性;完成前两个阶段、系统进入相对稳定状态后,才安心进入第三阶段——真正的”服务化”架构重构。如果没有第一、二阶段的铺垫,直接上来做第三阶段的架构重构,方案就得糅合业务降级、接入服务中心等一大堆事项,导致方案不聚焦、异常复杂。S系统的重构做法类似,但S系统当时的主要问题是可用性不高,并没有系统耦合的问题,所以策略是”先救火、后优化、再重构”:救火阶段做扩容(防止资源不足导致系统被压死)和Nginx一键切换功能(故障时快速切换);优化阶段解决一些明显的可用性问题(包括性能问题等);重构阶段把原来的单点数据库改造成多中心架构。两个案例共同验证了同一个道理:采用分阶段策略是为了集中有限资源,让某个阶段只集中解决某一类问题——这样做首先效率高,因为阶段目标明确,决策和方案不需要太多取舍;其次每个阶段都能看到明显成果,给团队很大信心。
结构图:
flowchart LR
subgraph X["X系统:功能过多+可用性不高"]
X1["阶段① 救火<br/>解决过载/缓存慢/虚拟机挂死"] --> X2["阶段② 组件化<br/>切换到公司统一公共组件"] --> X3["阶段③ 服务化重构<br/>真正的架构重构"]
end
subgraph S["S系统:单纯可用性不高"]
S1["阶段① 救火<br/>扩容+Nginx一键切换"] --> S2["阶段② 优化<br/>解决明显可用性/性能问题"] --> S3["阶段③ 重构<br/>单点数据库→多中心"]
end
参考来源
- 位置:《从零开始学架构》第47讲《架构重构内功心法第三式:运筹帷幄》"X系统三阶段策略"与"S系统重构做法"(源文件:_epub-src/OEBPS/text00003.html)
- 结论依据:原文说明"可以看到,真正的架构重构在第三阶段,第一阶段和第二阶段都是为了第三阶段做准备而已……第一阶段的'救火'……完成第二阶段的事项后……我们就可以安心地做第三阶段的'服务化'工作了""S 系统……当时的策略是'先救火、后优化、再重构'。'救火'阶段做了扩容……优化阶段将一些明显的可用性问题解决……重构阶段将原来的单点数据库改为多中心",直接支撑本卡结构图。
- 原始内容:真正的架构重构在第三阶段,第一阶段和第二阶段都是为了第三阶段做准备而已……S 系统……当时的策略是"先救火、后优化、再重构"。"救火"阶段做了扩容……重构阶段将原来的单点数据库改为多中心