On Building Systems That Will Fail 笔记

Fernando J. Corbató 领导并组织构建了 CTSSMultics 系统。

因为在通用、大规模兼容分时和资源共享的计算机系统方面的卓越贡献,他获得了 1990 年的图灵奖,而《On Building Systems That Will Fail》就是他的获奖发言。

文章讲述了他在构建 CTSS 和 Multics 时的经历,关于如何构建系统、以及如何处理系统失效。

关于庞大的系统

那些庞大的系统通常具有以下属性:

  1. 规模庞大
  2. 太复杂,以至于导致人手不足
  3. 构建时间很长
  4. (因为太昂贵)而不可能被放弃
  5. 永远也完成不了!
  6. 很少能完全像预想中那样工作,有时会以一种剧烈的方式出错

以上是一些负面的属性,下面是庞大的系统的一些好的方面:

  1. 探索系统中的那些未知的部分令人振奋
  2. 开辟出一个新的服务,或者新的领域,成为人们的必需品
  3. 引发一系列后续创新

庞大的系统是如何出错的

构建庞大的系统非常困难,以下是一些可能造成失败的原因:

  1. 使用正确的技术构建了错误的产品
  2. 微妙的错误非常难以避免,甚至在某种程度上是不可避免的
  3. 误解了程序模型,或者使用了错误的模型
  4. 系统本身、或者系统依赖的底层系统改变得太快
  5. 对于构建一个需要处理大量新问题的系统来说,错误是不可避免的
  6. 在添加新特性时,忘记了旧有的假设,就会引发系统设计方面的 bug
  7. 即使是有经验的程序员也会出错

复杂性的来源

构建系统时的复杂性来源于以下方面:

  1. 人员的规模,以及由此产生出的信息传播失真,以及争论
  2. 编程仍然是一个探索中的领域
  3. 通常要基于假设对系统进行取舍
  4. 底层系统的不完美
  5. 要处理的条件太多
  6. 没有一种好的语言来描述系统状况,统计数据常常被误用或者被误解
  7. 变化太快
  8. 程序的使用者 —— 人 —— 以及由之而来的复杂性

结论

  1. 要向前迈进,构建庞大的系统是不可避免的
  2. 在庞大的系统中,错误是不可避免的
  3. 简洁和优雅非常重要:用最少的机制和最大的清晰度来完成给定的功能
  4. 使用隐喻:减少误解,加快理解,改善沟通,关注高层次而不是细节
  5. 使用受限的语言:让程序员和设计师在给定的范围内讨论,不会产生不着边际的想法
  6. 和人以及机器的错误作斗争,处理那些关键的失效错误部分
  7. 在设计系统时,应该假设它会被持续的更新和修复,通过高维度的功能和结构模块化,来产生一个易于修改的系统。
  8. 出错时,不要慌张,要找原因
  9. 从错误中学习,同时对新解决方案的可能性保持警觉
  10. 团队成员应该互相学习,互相教育

留言

comments powered by Disqus