
简介与概述
|
169
分来说,这个节点看起来丢三落四的。慢节点没有完全停止,而是发送结果太慢,常常
与其他节点不同步。
如果本应执行某些步骤的算法跳过了这些步骤或者执行结果不可见时,就发生了遗漏故
障。例如,消息在送往接收方的途中丢失,而发送方就像消息发送成功时那样,没有再
次发送而是继续运行,即使消息已经不可恢复地丢失了。遗漏故障也可能是由间歇性停
顿、网络过载、队列满等引起的。
8.7.3
任意故障
最难以解决的故障种类是
任意
故障或
拜占庭
故障(Byzantine fault):进程继续执行算法
步骤,但是以与违背算法的方式(例如,共识算法中的进程决定一个从未由任何参与者
提出过的值)。
此类故障可能是由于软件 bug 或运行不同版本算法的进程,在这种情况下,故障很容易
被发现和理解。如果我们无法控制所有进程,并且其中一个进程有意地误导其他进程,
则发现和理解故障会变得非常困难。
你可能在航空航天工业中听说过拜占庭式的容错:飞机和航天器的系统不会直接使
用子部件传来的值,而是会对结果进行交叉验证。另一个广泛的应用是加密货币
[GILAD17],那里没有中央权威,节点被多方控制,并且敌对的参与者有强烈的动机通
过提供错误响应来欺骗系统。
8.7.4
故障处理
我们可以通过构成进程组、在算法中引入冗余来
掩盖
故障:即使其中一个进程发生故障,
用户也不会注意到 [CHRISTIAN91]。
故障可能会带来一些性能损失:正常的执行依赖于进程可响应,而且系统必须回退到较
慢的执行路径来处理故障和纠正错误。故障往往可以通过一些方式来避免 ...