基于容错的拜占庭将军问题

       源自东罗马帝国的拜占庭,帝国很大,分封领地,将军们如何达成一致呢,信息传递过程中有间谍,叛徒,或者信使送达不畅等问题,如何保证信息是可靠高效的,将军们如何达成共识呢。

       回到现代社会,区块链是分布式网络,那么在P2P网络中如何保证数据的一致性呢,信息传递中出现断网,黑客攻击,单个节点沦陷会是很正常的事情,如何达成共识呢。

       比特币采用了挖矿的方式,通过解题来选出谁来记账,并给予一定的奖励。但随着交易增多,虽然保证了安全可靠,但也是一个低效的方法。企业中总不能用这种办法吧,联盟链也不能有太多节点的,如果节点太多会影响访问速度,我觉得是分布式网络自己的处理速度。比如一个请求来了,分布式网络会内部处理,怎么能够给人家一个满意的答复呢,要不要做一个程序,基于一种可实现的算法呢。

   人总是会想出办法来的,对于在分布式领域的难题,也叫拜占庭将军问题。就有了PBFT,practical byzantine fault tolerance,这是最重要的共识算法。

       先从传统的CS架构说起吧

基于容错的拜占庭将军问题_第1张图片
图片发自App

       这种架构我们现在还在用,我理解着我们上网就是这种架构的。

       后来比特币出现了,采用了完全不同的方式,去中心化,P2P网络,那么这些分布式的对等网络如何达成共识呢。

基于容错的拜占庭将军问题_第2张图片
图片发自App


       我作为客户来访问了,该网络顿时像军队一样整齐划一,然后给我一个满意的答复。因为内部有一个最重要的共识算法。

   

基于容错的拜占庭将军问题_第3张图片
图片发自App

       这张图里,所有的节点都称为副本,有一个主节点,且主节点目前只能指定,其余的都是副节点,他们在一个圈里,叫做view,如果这个主节点出现问题了,那么view也会变化个数字,叫做view change,内部变化反而很大,因为更换了主节点。

       对于这个问题,引入了有限状态机的概念(FSM),看图更容易懂,我也只能看懂这张图。

基于容错的拜占庭将军问题_第4张图片
图片发自App

       针对三阶段协议,不是很理解,再加上一张图就可以了。

基于容错的拜占庭将军问题_第5张图片
图片发自App
基于容错的拜占庭将军问题_第6张图片
图片发自App

       如果有一个节点出现了问题,那么也不会影响对于分布式网络的访问。公式是这样的:n=3f+1

       可以接受的故障率是f/3f+1。记住就是了,包括之前的那些算法推倒,但是我们只需要用结论。有些人就是可以做到相信并且用起来。

       媳妇儿有一天突然问我挖矿是怎么回事,我说了英文单词,比如blockchain,她说你别说英语,太能装了。

   我说,不是的,有时候翻译的名词会影响你的正确认知,就像smart contract,被翻译成智能合约,这样会有误解,虽然我没有更好的译法。

你可能感兴趣的:(基于容错的拜占庭将军问题)