分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能会延迟、丢失、重复。分布式系统面临的这个问题就是拜占庭将军问题,对于拜占庭将军问题,不同系统给出了不同的解决方案。拜占庭将军问题提现在区块链系统中就是:对于一笔合规交易如何让大家能够达成一确认;在其他分布式系统中是如何保证数据一致性。
拜占庭将军问题
拜占庭将军问题最早由图灵奖得主 Leslie Lamport 老爷子于 1982 年提出:一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果