知识卡片
可逆性靠重建而非撤销脚本实现
内容
向供应商解释”可逆性”需求时思维方式也要变——配置若不工作,需迅速恢复到最近的已知稳定状态,手动更新方式即便在最佳情况下也很难且耗时;供应商常反对说,要获得这种能力需要为每个可能的动作都写显式”撤销”脚本,这会让自动化变得昂贵复杂,但这恰恰说明他们仍未像软件开发人员一样思考。经验丰富的开发人员知道:自动化构建系统若能从头构建某个东西(如二进制镜像或配置片段),就能轻易恢复到上一版本而无须撤销任何操作——只需把版本控制重置到已知正常版本、从头构建、重新发布即可,因为这类流程认为软件生命周期是短暂的,可以简单地”重做”而非”撤销”。由软件定义的基础设施同样可以拥有这种短暂的生命周期,这是思维模式的巨大转变,却能带来软件定义真正的好处。
结构图:
flowchart LR
A["传统思路:为每个动作写撤销脚本<br/>=昂贵复杂"]
B["软件工程思路:版本控制+从头重建"]
B --> C["重置到已知正常版本"]
C --> D["从头构建"]
D --> E["重新发布=已撤销变更"]
A -.对比,不需要撤销.-> E
参考来源
- 位置:《架构师应该知道的37件事》第2章《架构》之"2.8 如果软件吞没了整个世界,最好使用版本控制"·"2.8.3 像软件工程师一样思考"(源文件:_epub-src/OEBPS/Text/chapter002.html)
- 结论依据:原文说明"经验丰富的软件开发人员知道,如果自动化构建系统能从头开始构建某个东西……它们就能轻易恢复到上一个版本,而无须撤销任何操作。它们将版本控制重置为上个已知的正常版本,从头构建,然后重新发布这个'撤销了变更'的配置",直接支撑本卡结构图。
- 原始内容:这是一种思维模式上的巨大转变,特别是你还在考虑所有硬件的年度折旧成本时,但是,只有这样思考才能体现出软件定义的真正好处。