什么是实用拜占庭容错机制?

简介: 什么是实用拜占庭容错机制?

实用拜占庭容错机制( Practical Byzantine Fault Tolerance),简称 PBFT, 今天我们就来了解下实用拜占庭容错机制,要想了解实用拜占庭容错机制,我们先从拜占庭将军问题说起。


占庭将军问题

故事是这样的,拜占庭帝国是 5-15 世纪的东罗马帝国,也就是现在的土耳其。拜占庭帝国拥有巨大的财富,它的十个邻邦国家都垂涎已久。但拜占庭城墙高耸,没有一个单独的邻邦能够成功入侵。任何单个的城邦的入侵行动都会失败,而且入侵的军队也会被歼灭,使得自身反而容易受到其他九个城邦的入侵。


这十个邻邦之间也相互觊觎对方的财富而时常爆发战争,拜占庭的防御能力很强,如果有六个或者更多的邻邦一起进攻才会成功。然而,其中一个或者几个邻邦发生背叛,答应一起进攻,但在其他人进攻的时候反悔了,就会导致只有五支或者更少的军队同时进攻,所有的进攻军队都会被歼灭。


因此,每个邻邦都小心翼翼,不敢轻易相信邻邦,因为稍有不慎,就会给自己带来灾难。这就是拜占庭将军问题。

占庭容错机制

通俗的解释就是大家共同商定好的一种规则,大家为了一个共同的目的共同达成的一个认知。区块链网络节点达成的记账共识与拜占庭将军问题的攻城是相似的,可以将区块链中的节点比作将军,不会背叛的将军比作正常节点,会背叛的将军比作恶意节点。


为了方便理解,我们假设有甲、乙、丙、丁 4 位将军攻城。同时有 3 位将军进攻视为进攻成功。我们假设将军乙为叛徒,将军甲派出通信兵告诉其他 3 位将军子时进攻,因为将军乙是叛徒,他收到将军甲的消息后,派出通信兵告诉将军丙和将军丁丑时进攻。将军丙收到将军甲的消息派出通信兵告诉将军乙和将军丁子时进攻。将军丁收到将军甲的消息派出通信兵告诉将军乙和将军丙子时进攻。于是:


将军乙收到:子时、子时、子时;


将军丙收到:子时、丑时、子时;


将军丁收到:子时、丑时、子时;


这样每个将军执行自己收到的最多的消息。将军丙和将军丁收到的子时进攻消息最多,将军甲、将军丙、将军丁 3 位将军于子时进攻,进攻成功。这就是 PBFT 算法,在研究拜占庭将军问题时,分布式节点总数必须大于或等于4,且恶意节点不能超过三分之一时,就可以保障节点达成一致性结果,区块链的中的各个节点按照这种算法即可达成共识。


相关文章
|
7月前
|
存储 算法 安全
|
10月前
为什么分布式系统中无法同时保证一致性和可用性?
为什么分布式系统中无法同时保证一致性和可用性?
177 0
|
10月前
|
算法 NoSQL 分布式数据库
如何在分布式系统中实现一致性?
如何在分布式系统中实现一致性?
230 0
|
消息中间件 负载均衡 JavaScript
浅谈分布式系统中的补偿机制设计问题
浅谈分布式系统中的补偿机制设计问题
|
存储 算法 安全
分布式系统与一致性协议
分布式系统的设计目标一般包括如下几个方面 - 可用性:可用性是分布式系统的核心需求,其用于衡量一个分布式系统持续对外提供服务的能力。 - 可扩展性:增加机器后不会改变或极少改变系统行为,并且能获得近似线性的性能提升。 - 容错性:系统发生错误时,具有对错误进行规避以及从错误中恢复的能力。 - 性能:对外服务的响应延时和吞吐率要能满足用户的需求。
|
算法 区块链
理解分布式一致性:拜占庭容错与PBFT
理解分布式一致性:拜占庭容错与PBFT
理解分布式一致性:拜占庭容错与PBFT
|
新零售 消息中间件 存储
保证分布式系统数据一致性的6种方案
在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性?
4125 0
|
算法 区块链
分布式系统:一致性协议
一致性模型本质上是进程与数据存储的约定,通过一致性模型我们可以理解和推理在分布式系统中数据复制需要考虑的问题和基本假设。那么,一致性模型的具体实现有一些呢?本文会介绍一致性协议实现的主要思想和方法。 什么是一致性协议 一致性协议描述了特定一致性模型的实际实现。
2266 0