知识卡片
主动触发故障反而能提高容错系统的可信度
内容
建立在[[故障与失效的区分决定容错设计的目标]]之上的一个反直觉做法是:在容错系统中, 故意提高故障率(比如在没有警告的情况下随机杀死单个进程)反而是有意义的,而不是应该 被避免的行为。这背后的逻辑是——很多高危漏洞实际上是由糟糕的错误处理代码导致的,而 这类代码只有在错误真正发生时才会被执行到,平时看起来完全正常,是一种”潜伏”的隐患; 如果只是被动等待故障”自然发生”,容错逻辑可能几个月甚至几年都不会被真正触发和检验, 一旦某天真的出问题,才发现容错代码本身也有bug。主动地、频繁地、可控地触发故障, 相当于持续地给容错机制”体检”,确保它真的在正常运转,从而建立起”故障自然发生时系统 能正确处理”的信心,而不是盲目相信写好的容错代码没有被测试过也一定管用。Netflix公司 的Chaos Monkey就是这种思路的具体实践——在生产环境里随机杀死实例,逼着系统的容错 设计接受持续的真实检验。这个原则可以推广到任何”平时用不上、关键时刻才生效”的机制: 不主动检验的容错代码,本质上是一段没有被测试覆盖的代码。
参考来源
- 位置:《数据密集型应用系统设计》第一章《可靠性、可伸缩性、可维护性》"可靠性"
(源文件:_epub-src/ch1_split_002.html)
- 结论依据:原文说明许多高危漏洞由糟糕的错误处理导致,因此故意引发故障可以确保
容错机制不断运行并接受考验,从而提高系统在故障自然发生时能正确处理的信心,并举
Netflix Chaos Monkey为例,直接支撑本卡片结论。
- 原始内容:反直觉的是,在这类容错系统中,通过故意触发来提高故障率是有意义的,
例如:在没有警告的情况下随机地杀死单个进程。许多高危漏洞实际上是由糟糕的错误
处理导致的,因此我们可以通过故意引发故障来确保容错机制不断运行并接受考验,从而
提高故障自然发生时系统能正确处理的信心。Netflix公司的Chaos Monkey就是这种方法的
一个例子。