readnotes/devops/googlesre/9.md

50 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第九章 简单化
可靠性只有靠对最大程度的简化不断追求而得到。 ---- C.A.R.Hoare, Turing Award lecture
软件系统本质上是动态和不稳定的。SRE的工作室在系统的灵活和稳定性上维持平衡。
## 系统的灵活性与稳定性
有时候为灵活性而牺牲稳定性是有意义的。
SRE通过创造流程、实践以及工具来提高软件的可靠性同时SER需要最小化这些工作对于开发人员灵活性造成的影响。
## 乏味是一种美德
我们不想要自发性和有趣的程序,我们希望这些程序按设计执行,可以预见性的完成商业目标。
关注必要复杂度和意外复杂度之间的区别非常关键,必要复杂度是一个给定情况所固有的复杂度,不能从该问题的定义中移除;意外复杂度是不固定的,可以通过工程上的努力来解决。
为最小化意外复杂度SRE团队应该
- 在他们所负责的系统中引入意外复杂度时,及时提出抗议
- 不断努力消除正在接手的和已经负责运维的系统的复杂度
## 我绝不放弃我的代码
SRE推崇保证所有的代码都有必须存在的目的的实践。
## 负代码行作为一个指标
添加到项目中的每行代码都可能引入新的缺陷和错误。
较小的项目容易理解,也更容易测试,而且通常缺陷也少。应该按需删除无用的代码。
对于增加新功能的需求,应该持保守态度。
## 最小API
不是在不能添加更多的时候,而是在没有什么可以去掉的时候,才能达到完美。
书写一个明确的最小的API是管理软件系统管理简单性必要的部分。
## 模块化
在二进制文件之间或二进制文件与配置之间推行松耦合,是一种同时提高开发人员灵活性和系统稳定性的简化模式。
模块化同样适用用分布式系统与数据的设计。
## 发布简单化
简单的发布流程要比复杂的发布流程更好。如果发布是按更小的批次进行的,我们就可以更有信心地进行更快的发布,因为每个变更在系统中的影响都可以独立理解。