在两将军问题中,如果通信兵被敌军俘获并且叛变 ,将会传递错误的信息给A1将军和A2将军,从而更难达成共识 。为了解决通信中传递错误信息的问题,业界提出了拜占庭将军问题。
如下图所示,6支军队分别由 6位拜占庭将军 ( A1~A6) 率领,他们共同围攻城池内的敌军。各支军队的行动策 略为进攻/撤退两 种,如果部分军队进攻、部分军队撤退可能会造成灾难性后果,因此A1~A6将军必须通过投票来达成共识 ,即所有军队一起进攻或所有军队一起撤退 。因为各位将军分处城市的不同方向,他们只能通过通信兵互相联系。在投票过程中,每位将军都将投票给出进攻还是撤退的信息,然后通过通信兵分别通知其他将军, 从而根据自己的投票和其 他将军送来的信息,每位将军就可知道共同的投票结果并决定行动策略。
拜占庭将军的难题在于拜占庭故障,即通信兵可能被敌军俘获并且叛变,从而传递错误信息,还有将军也有可能成为叛徒。例如,错误消息让将军判断出3人以上要求进攻,但实际上并没有这么多进攻的投票,最终导致误判 。
在分布式系统中,典型的拜占庭故障,就是某台服务器的进程因CPU繁忙、内存申请超时、网络拥塞、磁盘响应慢等原因出现工作状态不正常,却继续带病工作的亚健康状态。在非安全网络中,通过伪装来窃取信息,也是安全中要预防的典型的拜占庭故障。分布式系统为了解决拜占庭故障,可以采用以下解决方案。
1.根据分 布式系统的服务器总数,限定发生拜占庭 故障的服务器数,来确保解决该问题。例如,服务器总数为 N, 那么发生拜占庭故障 的服务器数不能超 过 1/3*N(服务器总数的 1/3),剩下的服务器还能通过多数派达成共识。
2.根据数字签名识别伪装的服务器,或者根据序 列号识别亚健康服务器 的错误消息,并及时将它们隔离。通过防护手段,尽早地隔离系统中的不稳定因素,从而支撑共识的达成。
1999年, MiguelCastro与 BarbaraLiskov在论文 P ractica l Byzantine Fault Tolerance andProactiveRecovery中通过高性能的运算方法,提升了拜占庭故障的容错和恢复性能。
资料来源:《对象存储实战指南》
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。