主要观点:多年前评审编码挑战时,曾认为一个仅三十行代码的简单 Python 文件是完美的,但被其他评审认为不够好,多年后认为伟大的软件设计应简单,应在设计阶段消除尽可能多的失败模式。
关键信息:
- 软件系统有很多可能出错的情况,设计围绕潜在失败模式有两种方式,一是反应式,二是设计使其不存在。
- 设计使其不存在的方式包括:将组件移出热路径、使用更少的组件、集中状态、使用经过验证的系统等。
- 如将端点构造代码移到 cron 任务、移除数据库、规范化状态、依赖可靠系统等例子。
重要细节: - 曾有一个极慢的目录端点,通过将端点构造代码移到 cron 任务解决了资源饥饿等问题。
- 一个文档 CRM 因设计问题出现各种问题,移除数据库后解决了很多可能的运行和操作错误。
- 状态不一致是很糟糕的失败模式,设计使关键状态有单一真相源很重要。
- Ruby 服务器 Unicorn 简单但可靠,因其将很多工作交给进程和套接字 Linux 原语,且进程隔离更可靠。
- 评审存在不公平,更倾向公司常用语言的提交。某项目中还存在数据库会话未清理的问题。伟大的软件设计大多时候看起来不显眼,而是消除潜在问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。