- 15
- 0
- 约6.45千字
- 约 6页
- 2019-11-22 发布于中国
- 举报
起源
拜占庭 位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占
庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军
之间只能靠信差传消息。 在战争的时候,拜占庭军队内所有将军和副官必需达
成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。但是,在军队内有
可能存有叛徒和敌军的间谍,左右将军们的决定又扰乱整体军队的秩序。在进
行共识时,结果并不代表大多数人的意见。这时候,在已知有成员谋反的情况
下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就
此形成。
将军问题
拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决
定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中
存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;
促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;
或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则
任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜
利。
拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或断开以及遭到
恶意攻击,计算机和网络可能出现不可预料的行为。拜占庭容错协议必须处理
这些失效,并且这些协议还要满足所要解决的问题要求的规范。这些算法通常
以其弹性 t 作为特征, t 表示算法可以应付的错误进程数。
很多经典算法问题只有在 tn/3 时才有解,如拜占庭将军问题,其中 n 是系统
中进程的总数。
失效
所谓拜占庭失效指一方向另一方发送消息,另一方没有收到,发送方也无法确
认消息确实丢失的情形。
在容错的分布式计算中,拜占庭失效可以是分布式系统中算法执行过程中的任
意一个错误。这些错误被统称为 “崩溃失效 ”和 “发送与遗漏是失效 ”。当拜
占庭失效发生时,系统可能会做出任何不可预料的反应。
这些任意的失效可以粗略地分成以下几类:
进行算法的另一步时失效,即崩溃失效;
无法正确执行算法的一个步骤;
执行了任意一个非算法指定的步骤
各个步骤由各进程执行,算法就是由这些进程执行的。一个错误的进程是在某
个点出现了上述情况的进程。没有出现错误的进程是正确的进程。
解决算法
拜占庭问题的最初描述是: n 个将军被分隔在不同的地方,忠诚的将军希望通
过某种协议达成某个命令的一致(比如一起进攻或者一起后退)。但其中一些
背叛的将军会通过发送错误的消息阻挠忠诚的将军达成命令上的一致。 Lamport
证明了在将军总数大于 3m ,背叛者为 m 或者更少时,忠诚的将军可以达成命
令上的一致。
为了保证上面的需求,必须满足下面两个条件:
1. 每两个忠诚的将军必须收到相同的值 v(i) (v(i) 是第 i 个将军的命令)
2. 如果第 i 个将军是忠诚的,那么他发送的命令和每个忠诚将军收到的 v(i)
相同
为了简化以上模型,我们使用一个将军发送命令给多个副官的形式来证明,发
送命令的将军称为发令者,接收命令的将军为副官,那么上面的两个条件可以
表述为:
IC1. 所有忠诚的副官遵守相同的命令
IC2. 如果发出命令的将军是忠诚的,那么所有忠诚的副官遵守司令(发出命令
的将军)的命令
特别提示 :发送命令的每次只有一个将军,将其命令发送给 n-1 个副官。 m 代
表叛国者的个数,因为将军总数为 n,所以副官总数为 n-1 个。 IC2 中副官遵
守实际上是指忠诚的将军能够正确收到忠诚将军的命令消息。
通过口头消息
通过口头消息传递达到一致,如果有 m 个叛国将军,则将军们的总数必须为
3m+1 个以上。下面是口头消息传递过程中默认的一些条件:
A1. 每个被发送的消息都能够被正确的投递
A2. 信息接收者知道是谁发送的消息
A3. 能够知道缺少的消息
A1 和 A2 假设了两个将军之间通信没有干扰,既不会有背叛者阻碍消息的发送
原创力文档

文档评论(0)