五篇分布式共识系列文章合集:
分布式共识算法(拜占庭容错算法)的系列整理一:PBFT、PoW、PoS、DPos
分布式共识算法(故障容错算法)系列整理(二):Bully、Gossip、NWR
分布式共识算法(故障容错算法)系列整理(三):Paxos
分布式共识算法(故障容错算法)系列整理(四):Raft
分布式共识算法(故障容错算法)系列整理(五):ZAB
什么是分布式共识?
- 在多个节点均可独自操作或记录的情况下,使得所有节点针对某个状态达成一致的过程
- 本质是“求同存异”
一致性和共识的区别是什么?
- 一致性:分布式系统中的多个节点之间,给定一系列的操作,在约定协议的保障下,对外界呈现的数据或状态时一致的
- 共识:分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程
- 一致性强调结果,共识强调达成一致的过程,共识算法是保障系统满足不同程度一致性的核心技术
分布式共识的两个关键点是什么?
- 1.获得记账权
- 2.所有节点或服务器达成一致
拜占庭容错算法和非拜占庭容错算法
- 拜占庭将军问题描述的是最困难的,也是最复杂的一种分布式故障场景,除了存在故障行为,还存在恶意行为的一个场景。必须使用拜占庭容错算法(Byzantine Fault Tolerance,BFT)。还有:PBFT 算法,PoW 算法
- 在计算机分布式系统中,最常用的是非拜占庭容错算法,即故障容错算法(Crash Fault Tolerance,CFT)。CFT 解决的是分布式的系统中存在故障,但不存在恶意节点的场景下的共识问题。这个场景可能会丢失消息,或者有消息重复,但不存在错误消息,或者伪造消息的情况。常见的算法有 Paxos 算法、Raft 算法、ZAB 协议
区块链是什么?
- 由包含交易信息的区块从后向前有序链接起来的数据结构
- 其中区块是指很多交易数据的集合,每个区块包括区块头和区块体
- 区块体包括前一区块的哈希值、本区块的哈希值和时间戳
- 区块体用来存储交易数据
PBFT
口信消息型拜占庭问题之解的局限
- 如果将军数为 n、叛将数为 f,那么算法需要递归协商 f+1 轮,消息复杂度为 O(n ^ (f + 1)),消息数量指数级暴增。 如果叛将数为 64,消息数已经远远超过 int64 所能表示的了
- 尽管对于签名消息,不管叛将数(比如 f)是多少,经过 f + 1 轮的协商,忠将们都 能达成一致的作战指令,但是这个算法同样存在“理论化”和“消息数指数级暴增”的痛点
过程
- 客户端向主节点发送请求,主节点收到请求后,执行三阶段协议
- 主节点进入预准备(Pre-prepare)