两个经典的分布式问题

两将军问题

两个将军各自带领一个军队,准备攻打敌方城池,两个军队分营驻扎,中间有条山相隔,山由敌方部队占领。然后两个不对准备攻打城池,只有两个军队一块进行攻打,才能成功攻下城池,仅有一方攻打就会打不赢,失败了,也就是不能葫芦娃救爷爷。要想一块进行攻打城池,两个军队只能通过信使来相互传消息,双方都确认对方要攻打城池的时间,才进行进攻就能打赢,但是这里有问题,信使有可能会被敌方军队捕获,也就导致信息传不到对方手中。这就产生了矛盾的情况,我来举例说明。

军队A派信使给军队B传递攻打城池时间,信使被敌方捕获,军队A得不到回应,军队B也收不到信息,同步失败

军队A派信使给军队B传递攻打城池时间,信使到达军队B,军队B向军队A确认攻打城池时间,信使被捕获,军队A得不到确认信息,军队B得不到军队A确认确认的信息,通信失败

军队A派信使给军队B传递攻打城池时间,信使到达军队B,军队B向军队A确认攻打城池时间,军队A向军队B确认已经受到确认信息,信使被捕获,军队B收不到军队A确认确认的信息,军队A收不到军队B确认确认确认的信息,通信失败。

okokok,不说了,这个没完没了,这个问题是无解的,这也是经典的分布式问题,但是这个问题有工程解,那就是tcp的三次握手,通过三次握手,在实际的工程上基本上能解决两将军问题

拜占庭将军问题

这个问题和两将军问题些许类似,但是相对更加复杂,这个问题描述位,有多个将军带领军队攻打城池,将军还是只能通过信使进行同步攻打时间,因为有多个军队,如果不是全部进攻有部分军队没有进攻,那么攻打就失败,通过信使每两个军队之间传递消息,当军队受到半数以上的进攻消息,那么就进攻。这里的难点在于军队之间可能会有叛徒,伪造进攻或者撤退消息,而且受到伪造消息的将军并不能判断哪个是叛徒伪造的信息,而且各个叛徒之间可能联合起来破坏军事行动,那么拜占庭将军问题是在于所有忠实将领在同一个计划上得到共识。

总结

这两个问题都是描述分布式系统的问题,将军就是计算机,信使就是网络通信系统,节点和网络之间会有各种各样的问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值