我们需要的是数学上满足一定边界条件后的容许集合--拜占庭将军模型问题

前一阵子有机会被公司外派封闭培训,说实话,吃得好睡得充实,生活丰富多彩,就是晚上也安排了集体读书和学习讨论。感觉人生被按下了暂停键,感谢上级给了一次重建健康且有规律生活的学习方式的机会。

因为我所在办公室的人非常少,原先的四个人各负其重,后来有一个被提拔后岗位职责和会务激增的情况下,仍然会仗义承担原来的部分工作,这让我颇心存感激。

我原来担心的系统的健硕性很低,少一人其他两个人的压力就会倍增的情况并未发生。

我能够静下心来反思很多问题,明晰规划自己接下来要走的路和方向:明晰边界,拓深思维,系统性构造,实现突破与创造。

在管理中,上数担忧其实是拜占庭将军问题(Byzantine Generals Problem),这是由莱斯利·兰波特在其同名论文中提出的分布式对等网络通信容错问题。

在分布式计算中,不同的计算机通过通讯交换信息达成共识而按照同一套协作策略行动。但有时候,系统中的成员计算机可能出错而发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性。拜占庭将军问题被认为是容错性问题中最难的问题类型之一。

莱斯利·兰波特在其论文中描述了如下问题:

一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。

系统的问题在于,可能将军中出现叛徒,他们不仅可能向较为糟糕的策略投票,还可能选择性地发送投票信息。这样各支军队的一致协同就遭到了破坏。

由于将军之间需要通过信使通讯,叛变将军可能通过伪造信件来以其他将军的身份发送假投票。而即使在保证所有将军忠诚的情况下,也不能排除信使被敌人截杀,甚至被敌人间谍替换等情况。因此很难通过保证人员可靠性及通讯可靠性来解决问题。

假使那些忠诚(或是没有出错)的将军仍然能通过多数决定来决定他们的战略,便称达到了拜占庭容错。在此,票都会有一个默认值,若消息(票)没有被收到,则使用此默认值来投票。

上述的故事映射到计算机系统里,将军便成了计算机,而信差就是通信系统。

虽然上述的问题涉及了电子化的决策支持与信息安全,却没办法单纯的用密码学与数字签名来解决。因为电路错误仍可能影响整个加密过程,这不是密码学与数字签名算法在解决的问题。因此计算机就有可能将错误的结果提交去,亦可能导致错误的决策。

把问题往下拆解,在“拜占庭将军”的问题可以在“军官与士官的问题”里解决,以降低将军问题的发生。而所谓的“军官与士官的问题”,就是探讨军官与他的士官是否能忠实实行命令。

其中一个解决方案认为即使出现了伪造或错误的消息。只要有问题的将军的数量不到三分之一,仍可以达到“拜占庭容错”。原因是把同样的标准下放到“军官与士官的问题”时,在背叛的军士官不足三分之一的情况下,有问题的军士官可以很容易的被纠出来。比如有军官A,士官B与士官C。当A要求B进攻,却要求C撤退时。就算B与C交换所收到的命令,B与C仍不能确定是否A有问题,因为B或C可能将窜改了的消息传给对方。以函数来表示,将军的总数为n,n里面背叛者的数量为t,则只要n > 3t就可以容错。

另一个解决方案需要有无法消去的签名。在现今许多高度信息安全要求的关键系统里,数字签名就经常被用来实现拜占庭容错,找出有问题的将军。然而,在生命攸关系统里,使用错误侦测码就可以大幅降低问题的发生。无论系统是否存在拜占庭将军问题。所以需要做密码运算的数字签名也不一定适合这类系统。

此外,还有其他用来达到拜占庭容错的架构被提出,如:FTMP、MMFCS与 SIFT。

在分布式对等网络中需要按照共同一致策略协作的成员计算机即为问题中的将军,而各成员计算机赖以进行通讯的网络链路即为信使。拜占庭将军问题描述的就是某些成员计算机或网络链路出现错误、甚至被蓄意破坏者控制的情况。

在点对点式数字货币系统里,数字货币网络的运作是平行的(parallel)。各节点与终端都运算著区块链来达成工作量证明(PoW)。工作量证明的链接是解决数字货币系统中拜占庭问题的关键,避免有问题的节点(即前文提到的“反叛的将军”)破坏数字货币系统里交易帐的正确性,是对整个系统的运行状态有着重要的意义。你没看错,点对点式数字货币系统主要就是比特币算法。

在一些飞行器(如波音777)的系统中也有使用拜占庭容错。而且由于是即时系统,容错的功能也要能尽快回复,比如即使系统中有错误发生,容错系统也只能做出一微秒以内的延迟。你看飞机上的所有主用系统一般都会有一至两套的备份系统以防主用系统出现故障,因此飞机是可以带着故障飞的。飞机制造商会为每个飞机型号都制定相应的MMEL(Master Minimum Equipment List,主最低设备清单),允许有备份的设备在一个或者多个不工作情况下的飞行,同时会增加一些飞机运行的限制条件,比如发动机反推不工作,飞机一样可以落地,但是会造成飞机落地减速滑行的距离变长。

另外还有一个CDL(Configuration Deviation List,构型缺失清单),规定了飞机在外部构型部分缺失的情况下的飞行,比如飞机机身上的某个盖板丢了之类的,甚至可以贴个金属胶布继续飞。

一些航天飞机的飞行系统甚至将容错功能放到整个系统的设计之中。

拜占庭容错机制是将收到的消息(或是收到的消息的签名)转交到其他的接收者。这类机制都假设它们转交的消息都可能含有拜占庭问题。在高度安全要求的系统中,这些假设甚至要求证明错误能在一个合理的等级下被排除。

其实不单纯管理,在很多作业的程序系统,生产系统本身已经在采用这种故障保留的管理理念了。

我们不需要完全最优化,完全的最优解。我们需要的是数学上满足一定边界条件后的容许集合。我们可以带着故障继续作业,只要不是关键性故障。这也是近代操作系统不断滚动更新的思路。

乔布斯说,你不需要照顾聪明人的想法。到了四十岁,我走过的路使我我深以为然,把这句话奉为真理。那些诈骗你的,欺负你的,都是聪明人中的聪明人,被骗也心怀感激和激赏,不过技不如人罢了,我学到了经验,下次与人斗就会其乐无穷。但是要远离那些又傻又蠢的人,这不属于要逃跑的将军,欺诈型信使,而是属于友军中的叛徒。骗子至少会使你成长他自己会收拾自己的烂摊子,但又蠢又傻的人如同拉了裤头子,他不知道自己为什么邋遢,还要伸手抹你一身屎。

我想说的是,如果你明白一个原理,那么你可以在无数的角度、无数的地方遇见这个原理。你不过是以无数似曾相识的方式检验这个原理。

而一旦你不明白其中的原理,你就会无数次以不同的方式去接触这个似曾相识的问题。那么你将以似曾相识的方式反复见到这个原理在你身上的沉淀和释放,并且你总是差点意思。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值