You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

2.1 KiB

第九章 简单化

可靠性只有靠对最大程度的简化不断追求而得到。 ---- C.A.R.Hoare, Turing Award lecture

软件系统本质上是动态和不稳定的。SRE的工作室在系统的灵活和稳定性上维持平衡。

系统的灵活性与稳定性

有时候为灵活性而牺牲稳定性是有意义的。

SRE通过创造流程、实践以及工具来提高软件的可靠性,同时SER需要最小化这些工作对于开发人员灵活性造成的影响。

乏味是一种美德

我们不想要自发性和有趣的程序,我们希望这些程序按设计执行,可以预见性的完成商业目标。

关注必要复杂度和意外复杂度之间的区别非常关键,必要复杂度是一个给定情况所固有的复杂度,不能从该问题的定义中移除;意外复杂度是不固定的,可以通过工程上的努力来解决。

为最小化意外复杂度,SRE团队应该:

  • 在他们所负责的系统中引入意外复杂度时,及时提出抗议

  • 不断努力消除正在接手的和已经负责运维的系统的复杂度

我绝不放弃我的代码

SRE推崇保证所有的代码都有必须存在的目的的实践。

负代码行作为一个指标

添加到项目中的每行代码都可能引入新的缺陷和错误。 较小的项目容易理解,也更容易测试,而且通常缺陷也少。应该按需删除无用的代码。 对于增加新功能的需求,应该持保守态度。

最小API

不是在不能添加更多的时候,而是在没有什么可以去掉的时候,才能达到完美。 书写一个明确的,最小的API是管理软件系统管理简单性必要的部分。

模块化

在二进制文件之间或二进制文件与配置之间推行松耦合,是一种同时提高开发人员灵活性和系统稳定性的简化模式。

模块化同样适用用分布式系统与数据的设计。

发布简单化

简单的发布流程要比复杂的发布流程更好。如果发布是按更小的批次进行的,我们就可以更有信心地进行更快的发布,因为每个变更在系统中的影响都可以独立理解。