笔记

早期决策对系统的最终形态影响最大,最初的决策最难以更改。这个时候团队对软件的最终结构最无知,但必须要做出某些不可更改的决策。

敏捷强调及早发布并持续改进,意味着软件可以尽快投入使用,因为软件投入使用是唯一得知软件如何响应真实世界刺激的途径。

发布1.0版是软件生命的开始,而不是项目的结束。1.0版发布后,你的生活质量取决于你在这个重要里程碑之前所做的选择。

对于那些还没有被取消或废弃的系统来说,系统的运营时间要远远多于开发时间,靠承担经常性运营成本来避免一次性成本,是没有意义的。

宕机后恢复服务是优先级最高的任务。重大事故之后的管理认知和管理事故本身同样重要。

系统寿命受到的主要威胁是内存泄露和数据疯涨。

有条墨菲定律,只要你不针对某种失效情况特别做测试,它一定会发生。

最初的触发点,裂痕扩散的方式和损坏的结果,并称为故障模式。

代码耦合得越紧,代码错误扩散的机会也越大。反之,代码越松散,就如同减震器一样越能消除而非扩大这种错误的影响。

考虑下面各种可能存在的冲击和压力:

  • 如果我不启动连接?
  • 如果连接需要10分钟?
  • 如果已经连接,那它如何断开连接?
  • 如果已经连接,而我却不能得到另一端的任何响应?
  • 如果需要2分钟来回应我的查询请求?
  • 如果同时有10000个请求?
  • 如果网络陷入蠕虫的攻击而瘫痪,而我要将关于SQLException异常发生的错误信息写入日志时,我的磁盘已满?

网络永远是不可靠的,超时是让你放弃等待你认为不会到来的响应的一种简单机制。设置合理的超时可以隔离故障,在其他系统、子系统或设备中的问题不会成为你的问题。所有阻塞线程的资源池都应设置一个超时,以确保不管资源最后是否可用,线程都可以被解除阻塞。如果不这么做,就可能会永远等待了。

电路中的保险丝,自己先失效,从而控制整体失效。但是有人自己使用高电流低电阻的保险丝,从而不起到保险作用。软件系统中也可以使用断路器来保护。检测过度使用,然后先失效(跳闸),可以再重新设置恢复系统使用。