BFT: BFT即拜占庭容错,拜占庭容错技术是一类分布式计算领域的容错技术。拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或中断以及遭到恶意攻击等原因,计算机和网络可能出现不可预料的行为。拜占庭容错技术被设计用来处理这些异常行为,并满足所要解决的问题的规范要求。 拜占庭容错系统 : 发生故障的节点被称为 拜占庭节点 ,而正常的节点即为 非拜占庭节点 。 假设分布式系统拥有n台节点,并假设整个系统拜占庭节点不超过m台(n ≥ 3m + 1),拜占庭容错系统需要满足如下两个条件: 另外,拜占庭容错系统需要达成如下两个指标: PBFT即实用拜占庭容错算法,解决了原始拜占庭容错算法效率不高的问题,算法的时间复杂度是O(n^2),使得在实际系统应用中可以解决拜占庭容错问题n PBFT是一种状态机副本复制算法,所有的副本在一个视图(view)轮换的过程中操作,主节点通过视图编号以及节点数集合来确定,即:主节点 p = v mod |R|。v:视图编号,|R|节点个数,p:主节点编号。 PBFT算法的共识过程如下:客户端(Client)发起消息请求(request),并广播转发至每一个副本节点(Replica),由其中一个主节点(Leader)发起提案消息PRE-prepare,并广播。其他节点获取原始消息,在校验完成后发送prepare消息。每个节点收到2f+1个prepare消息,即认为已经准备完毕,并发送commit消息。当节点收到2f+1个commit消息,客户端收到f+1个相同的reply消息时,说明客户端发起的请求已经达成全网共识。 具体流程如下 : 客户端c向主节点p发送请求。o: 请求的具体操作,t: 请求时客户端追加的时间戳,c:客户端标识。REQUEST: 包含消息内容m,以及消息摘要d(m)。客户端对请求进行签名。 主节点收到客户端的请求,需要进行以下交验: a. 客户端请求消息签名是否正确。 非法请求丢弃。正确请求,分配一个编号n,编号n主要用于对客户端的请求进行排序。然后广播一条<, m>消息给其他副本节点。v:视图编号,d客户端消息摘要,m消息内容。进行主节点签名。n是要在某一个范围区间内的[h, H],具体原因参见 垃圾回收 章节。 副本节点i收到主节点的PRE-PREPARE消息,需要进行以下交验: a. 主节点PRE-PREPARE消息签名是否正确。 b. 当前副本节点是否已经收到了一条在同一v下并且编号也是n,但是签名不同的PRE-PREPARE信息。 c. d与m的摘要是否一致。 d. n是否在区间[h, H]内。 非法请求丢弃。正确请求,副本节点i向其他节点包括主节点发送一条消息, v, n, d, m与上述PRE-PREPARE消息内容相同,i是当前副本节点编号。进行副本节点i的签名。记录PRE-PREPARE和PREPARE消息到LOG中,用于View Change过程中恢复未完成的请求操作。 (责任编辑:admin) |