一种满足拜占庭协议的两轮通信方法转让专利

申请号 : CN200910085943.8

文献号 : CN101576835B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 肖爱斌刘波李任欣

申请人 : 北京控制工程研究所

摘要 :

一种满足拜占庭协议的两轮通信方法,步骤为:(1)冗余系统中M个单机分别将自身数据和同步脉冲发送给其它单机;(2)对脉冲个数进行计数并与预设值进行比较,若计数值小于预设值时各单机完全接收到其它单机发送的数据,则执行下一步,否则判断发生单机超时故障;(3)各单机将其接收到的M-1个数据及自身数据按相同顺序依次转发给其它单机,并对M次转发过程中的每一次脉冲个数均进行计数;若每一次转发时各单机均能在当次计数值小于预设值时接收到相同的M个数据,则执行下一步,否则判断发生单机超时故障;(4)各单机对M个数据逐一进行表决,若每次表决时各单机的对应数据均一致,则冗余系统正常,否则冗余系统发生拜占庭故障。

权利要求 :

1.一种满足拜占庭协议的两轮通信方法,其特征在于包括以下步骤:

(1)设冗余系统中有M个单机,6≥M≥4,各单机分别将自己的数据和同步脉冲发送给其它M-1个单机,同时等待接收其它M-1个单机发送的数据;

(2)对步骤(1)中的同步脉冲个数进行计数并与预设值进行比较,若同步脉冲的计数值小于预设值时各单机完全接收到其它M-1个单机发送的数据,则执行步骤(3);若同步脉冲的计数值与预设值相同时各单机还未完全接收到其它M-1个单机发送的数据,则执行步骤(5);

(3)各单机将其接收到的其它M-1个单机传来的数据及其自己的数据按同样的顺序依次转发给其它M-1个单机,各单机在转发数据的同时还保持发送同步脉冲,并对M次转发过程中的每一次的同步脉冲均进行计数;若每一次转发时各单机均能在当次同步脉冲个数的计数值小于预设值时接收到其它M-1个单机转发的数据,则执行步骤(4),否则执行步骤(5);

(4)各单机对M种数据中的每一种数据逐一进行表决,若每次表决时各单机的对应数据均一致,则判定冗余系统正常,否则执行步骤(5);

(5)判定冗余系统异常,若某单机未在规定计数时间内发送数据,则所述单机发生超时故障;若表决时只有一台单机的数据与最终表决结果不一致,则步骤(3)中转发此不一致数据的单机发生拜占庭故障;若多于一台单机的数据与最终表决结果不一致,则步骤(1)中发送此不一致数据的单机发生拜占庭故障。

说明书 :

技术领域

本发明设计一种通信方法,特别是一种在多机冗余系统中为了防止拜占庭故障所采用的两轮通信方法。

背景技术

在多机冗余系统中,系统通常需要对某台单机的专有数据达成一致,比如对于单机的时钟数据如何、对于专有的传感器数据如何,对于单机的状态数据如何等。对于这类单源数据,为了防止拜占庭故障,即拥有数据的单机给其它不同机器发送不一致的数据,系统需要执行两轮交换来达成一致,即第一轮拥有单源数据的机器发送自己的专有数据,第二轮其它机相互转发接收到的数据,这是经典的拜占庭协议(Byzantine Protocol)问题,相关内容可参见文献M.Pease,L.Lamport,S.Shostak.The Byzantine generalsproblem[J].ACM Trans.Programming Languages and Systems,1982,4(3):382~401。
对于由多台单机组成的冗余系统,两轮通信过程通常需要在同一段时间内执行完,以方便系统的容错判决;另一方面,系统所有单机需要对这种输入数据以相同的顺序进行处理。现有的两轮通信方法是每台单机分别执行这种两轮通信,首先,对于第一台被触发的机器,将自己的数据发送给其它单机,其它单机在收到该数据后,再相互进行转发给其它M-1个单机;然后第二台被触发的机器,重复第一台被触发机器执行过的这种两轮通信,第三台被触发的机器也重复这个过程,如此重复M次,使得系统中的每个单机都执行过两轮通信,再进行处理。这种方法的不足之处有两点:第一,每台单机的触发顺序是不确定的,导致每台单机完成两轮通信的先后顺序不一致,因而数据最终到达的时间也不一致,这就使得系统的容错判决困难;第二,这种两轮交换是顺序执行的,导致系统数据交换的时间相对较长。

发明内容

本发明的技术解决问题是:克服现有技术的不足之处,提供了一种容错判决简单、可提高整个系统通信效率的满足拜占庭协议的两轮通信方法。
本发明的方法的技术解决方案是:一种满足拜占庭协议的两轮通信方法,包括以下步骤:
(1)设冗余系统中有M个单机,6≥M≥4,各单机分别将自己的数据和同步脉冲发送给其它M-1个单机,同时等待接收其它M-1个单机发送的数据;
(2)对步骤(1)中的同步脉冲个数进行计数并与预设值进行比较,若同步脉冲的计数值小于预设值时各单机完全接收到其它M-1个单机发送的数据,则执行步骤(3);若同步脉冲的计数值与预设值相同时各单机还未完全接收到其它M-1个单机发送的数据,则执行步骤(5);
(3)各单机将其接收到的其它M-1个单机传来的数据及其自己的数据按同样的顺序依次转发给其它M-1个单机,各单机在转发数据的同时还保持发送同步脉冲,并对M次转发过程中的每一次的同步脉冲均进行计数;若每一次转发时各单机均能在当次同步脉冲个数的计数值小于预设值时接收到相同的M个数据,则执行步骤(4),否则执行步骤(5);
(4)各单机对M个数据中的每一个数据逐一进行表决,若每次表决时各单机的对应数据均一致,则判定冗余系统正常,否则执行步骤(5);
(5)判定冗余系统异常,若某单机未在规定计数时间内发送数据,则所述单机发生超时故障;若表决时只有一台单机的数据与最终表决结果不一致,则步骤(3)中转发此不一致数据的单机发生拜占庭故障;若多于一台单机的数据与最终表决结果不一致,则步骤(1)中发送此不一致数据的单机发生拜占庭故障。
本发明与现有技术相比的有益效果是:
(1)本发明中,M台单机的第一轮通信可以同时进行,当冗余系统中的各单机同步比较好时可以提高通信效率,使得通信轮数最高可以减少M-1轮;
(2)本发明中,第二轮数据转发的过程是按照约定的顺序进行的,因此第二轮数据交换结束后得到的是顺序一致的数据序列,方便系统容错判决;
(3)本发明中,采用发送与接收同步脉冲的过程作为超时计数单位,在等待接收其它机的数据过程中发送同步脉冲,一方面可以用来判定是否超时,另一方面可以方便获取其它机数据到来的时间,为系统同步提供参考。

附图说明

图1为本发明两轮通信方法的原理框图;
图2为4单机冗余系统中进行第一轮数据通信时数据流向示意图;
图3为4单机冗余系统中进行第二轮数据通信时数据A的流向示意图;
图4为4单机冗余系统中进行第二轮数据通信时数据B的流向示意图;
图5为4单机冗余系统中进行第二轮数据通信时数据C的流向示意图;
图6为4单机冗余系统中进行第二轮数据通信时数据D的流向示意图。

具体实施方式

如图1所示,为本发明两轮通信方法的原理框图,设冗余系统中有M个单机,此处6≥M≥4。因为根据文献M.Pease,L.Lamport,S.Shostak.The Byzantine generals problem[J].ACM Trans.Programming Languagesand Systems,1982,4(3):382~401中的相关内容可知,为了容忍f个单机发生拜占庭故障,冗余系统至少需要存在3f+1个单机。本发明方法适用于f=1的情况,也就是M≥4,此时冗余系统可以容忍1个单机发生拜占庭故障,采用本发明方法可以很好的进行纠错。当M≥7也就是f=2时,冗余系统可以同时容忍2个单机发生拜占庭故障,也就是说当M≥7时,冗余系统可能会同时有2个单机发生拜占庭故障,此时应至少进行三轮通信才能对2个故障单机进行处理,而采用两轮通信方法最多也只能纠检1个单机的错误,此时采用本发明的方法也可以纠检出2个故障单机中1个单机的错误,但显然其实用性已经大大降低,不利于在工程上应用。因此,为了提高针对单个单机发生拜占庭故障时纠错的可靠性,本发明方法中选取6≥M。各单机首先在第一轮时发送自己的数据,然后发送同步脉冲等待接收其它机的数据,在其它机的数据到达时记录此时自己发送同步脉冲的个数。若在发送同步脉冲的个数小于预先设定值时接收到其它机的数据,则各机第二轮按照约定的顺序依次转发第一轮收到的数据。在转发某台机数据后等待接收其它机数据的过程中,同样保持发送同步脉冲,据此来判断其它机是否发送超时故障。在第二轮结束后进行数据一致性表决,判断通信过程中是否发生拜占庭故障。本发明中通过对同步脉冲进行计数并与预设值进行比较来对数据发送过程进行计时,用于判定超时和记录其它机数据到达的时间。
若在通信过程中有某台机器的数据没有在规定时间内到达,即本机发送同步脉冲的个数不小于预先设定值,则判定数据没有到达的机器发生超时故障;否则,若表决时只有一台单机的数据与最终表决结果不一致,则判定第二轮转发此不一致数据的单机发生拜占庭故障,此机给不同机转发的数据不一致;若多于一台单机的数据与最终表决结果不一致,则判定第一轮发送此数据的单机发生拜占庭故障,此机给不同机发送的数据不一致。对于同步脉冲预设值,其主要与通信波特率、需要交换数据量的大小以及系统最晚完成两轮交换的时间有关。一般应用时,通常设置同步脉冲的个数为10个,当通信波特率为3.6864Mbps时,时间约为32.552us。
实施例
假设冗余系统中有4个单机(即M=4),分别为A机、B机、C机、D机,当采用本发明的方法进行通信时,第一轮的通信情况如图2所示,
A机:将A机的专有数据a分别发送给B机、C机和D机;
B机:将B机的专有数据b分别发送给A机、C机和D机;
C机:将C机的专有数据c分别发送给A机、B机和D机;
D机:将D机的专有数据d分别发送给A机、B机和C机。
在第一轮交换结束后,4台机器分别获得a、b、c、d的数据序列。由于在数据发送过程中可能发生拜占庭故障,某台机器可能给不同机器发送不一样的数据,使得每台机器得到的a、b、c、d的数据序列可能不一致,因此需要进行第二轮通信。
在进行第二轮通信时,各机转发数据序列a、b、c、d的情况分别如图3~图6所示,
A机:将数据a分别发送给B机、C机和D机,将数据b分别发送给B机、C机和D机,将数据c分别发送给B机、C机和D机,将数据d分别发送给B机、C机和D机;
B机:将数据a分别发送给A机、C机和D机,将数据b分别发送给A机、C机和D机,将数据c分别发送给A机、C机和D机,将数据d分别发送给A机、C机和D机;
C机:将数据a分别发送给A机、B机和D机,将数据b分别发送给A机、B机和D机,将数据c分别发送给A机、B机和D机,将数据d分别发送给A机、B机和D机;
D机:将数据a分别发送给A机、B机和C机,将数据b分别发送给A机、B机和C机,将数据c分别发送给A机、B机和C机,将数据d分别发送给A机、B机和C机。
4机在数据发送与转发过程中,在自己数据发出后转向发送同步脉冲,记录其它机器数据到达时自己发送同步脉冲的个数。一方面可以用来判定其它机是否超时(数据到达时发送同步脉冲的个数是否小于预先设定值),另一方面可以方便获取其它机数据到来的时间,为系统同步提供参考。同时接收到对方机的同步脉冲,可以作为二者通信链路正常的标志。
数据表决过程:对接收到的其它3机的数据采用3取2多数表决,如果表决时A、B、C、D机的数据完全一致,则判定系统通信正常,否则,判定在通信过程中发生拜占庭故障。例如,在表决数据a时,将A机第二轮转发的数据屏蔽掉,对B、C、D机转发的3份数据采用3取2多数表决获得表决的结果v,若A、B、C、D机的数据与表决结果v一致,则判定系统通信正常;否则,若A机或者B机或者C或者D之一与表决结果v不一致,其它3机与表决结果一致,则判定此不一致机发生拜占庭故障;否则,多于一台单机的数据与表决结果v不一致,则判定A机发生拜占庭故障。
以上仅对M=4的情况进行了说明,当M=5或6时,其进行两轮通信的原理和方法与M=4的情况相同。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。