1 问题来源
在我们学习一项新技术之前,首先要了解的是这个技术为何而出现,也就是说它是为了解决什么问题。2013年图灵奖获得者 Leslie Lamport 为了解决分布式系统中的一致性问题,抽象出来了一个例子,这个例子就是著名的“拜占庭将军问题”。
拜占庭帝国国土辽阔,每支军队的驻地相隔很远,将军们只能靠信使传递消息。发生战争时将军们必须制订统一的行动计划。然而,这些将军中有叛徒,叛徒们篡改行动计划并传播虚假消息。因此,将军们必须提前制订一个预案,使所有忠诚的将军能够达成一致。即使存在少数几个叛徒也不能使忠诚的将军们做出错误的计划。也就是说,拜占庭将军问题的实质就是要寻找一个方法,使得将军们在一个有叛徒的非信任环境中建立对战斗计划的共识,能够有效过滤那些被篡改的计划。
而在分布式系统中,特别是在区块链网络环境中,存在许多类似拜占庭将军问题,比如故障的服务器、遭黑客攻击的服务器,这些称之为“拜占庭错误节点”。而共识算法的核心就是在正常的节点间形成对网络状态的共识。
2 分布式系统中的一个实际问题
假如有一个分布式集群,这个集群是由节点 A、B、C 组成,提供只读 key-value 存储服务。创建只读变量的时候,必须要先对它进行初始化,而且这个值后续不能再修改了。所以,所有节点必须要先对只读变量的值达成共识&#