1. 什么是共识
首先,查一下新华字典:
共识:指一个社会不同阶层、不同利益的人所寻求的共同认识、价值、理想。
简单理解就是指所有的参与者(关联方)都达成一致的意思。
公司的年会活动聚餐,不同的人有不同的喜好和口味,有的人喜欢吃火锅,有的人喜欢烧烤,有的人不吃辣,有的人不吃海鲜。。。
此时,共识就是指大家最终达成了一致的协定,最终选择了一个年会聚餐的地方。
2. 为什么需要共识
对于一个有多个参与者的系统或者组织,如果大家都按照各自的意愿做事,那么,这个系统和组织也就没有意义。
设想,如果在一个分布式数据库系统中,查询一个用户的余额,不同的节点,对相同的用户返回了不同的余额,那么这个系统也就毫无可靠信而言。
3. 如何达成共识
中心化系统
- 在一个中心化的系统中,只需要所有的参与者都服从“中心”的安排即可。比如,数据库的主从备份,公司的组织架构管理等等。
去中心化系统
- 在去中心化系统中,每个参与者都是对等的关系,没有任何的参与者是处于权力领导地位。此时,就需要使用某些特定的共识机制,来达成去中心化系统的共识,而这个共识机制,就是所谓的共识算法。
4. 区块链中的共识
区块链系统,是一个典型的去中心化的系统,包含未知数量的节点,每个节点之间都是对等关系。
在区块链系统中,每个节点(即参与者)不仅自己维护一份数据(也就是常说的区块链账本),同时,还保持跟其他节点(其它参与者)维护的数据相一致,这就是区块链中的共识。
5. 共识机制(共识算法)
在区块链共识中,协同松散耦合、互不信任的节点之间达成信任关系,并保障一致性,持续性协作的过程,通常抽象为“共识”过程,而这个过程中,所牵涉的算法和策略统称为共识机制。所以,共识机制,往往也称作为共识算法。
区块链系统是有多个节点组成,任意安装了相应区块链系统所需软硬件,加入到区块链网络里的计算机,就可以称为一个“节点”。如果节点间通信十分顺畅,各个节点都能瞬间响应,那么只需要简单广播投票和应答就可以解决一致性问题。然后现实并不是这样。节点往往会遇到网络中断、节点故障、恶意节点(被入侵后篡改,或者原本就是恶意节点)。节点遇到的问题可以进行如下的分类:
- 节点出现故障但不会伪造信息的情况称为“非拜占庭错误”;
- 节点会伪造信息恶意响应的情况称为“拜占庭错误”,伪造信息的节点称为拜占庭节点(恶意节点)。
相对应的,共识算法也可以分为 CFT 和 BFT 两类:
CFT(Crash Fault Tolerance):
- 只容忍节点故障,不容忍“恶意”作恶;
- 常见的比如:Paxos,Raft 等等;
BFT(Byzantine Fault Tolerance):
- 可以容忍节点故障与“恶意”节点;
- 常见的比如:POW,POS(DPoS),POA,PBFT(dBFT,RPBFT)等等;
恶意节点是指在一个节点发送错误或者被篡改过的数据。可能是由于被外部入侵后修改,也可能原本就是某些攻击者估计接入的篡改了区块链系统软件的节点。
5.1. CFT 算法
Paxos 算法和 Raft 算法是常见于分布式服务器集群中的共识算法,主要目的是解决分布式系统中存在故障(fault),但不存在恶意(corrupt)节点场景(即可能消息丢失或重复,但无错误消息)下的共识达成(Consensus)问题。
Paxos 算法出现的比较早,在后来一系列的 Paxos 算法变种形成了丰富的 Paxos 算法族。Raft 算法与 Paxos 算法有很大的关联,可以认为 Raft 就是在 Paxos 算法基础上改进而来。
5.2. Paxos && Raft
Paxos
- 1990 年由 Leslie Lamport 提出的 Paxos 共识算法,在工程角度实现了一种最大化保障分布式系统一致性(存在极小的概率无法实现一致)的机制。Paxos 被广泛应用在 Chubby、ZooKeeper 系统中。
- 早期的 Basic Paxos 的协议复杂,且相对效率较低,所以在后来提示了很多对几点 Paxos 改进的版本,比如:Fast Paxos,Multi-Paxos 以及 Byzanetine Paxos 等等。
Raft
Paxos 和 Raft 比较
- Paxos 相对 Raft,理解和实现都更难;
- Raft 的流程和描述更清晰,更容易理解和实现;
- Raft 能容忍 不大于 (N-1)/2 个故障节点;
- Paxos 根据不同的实现,最大容忍错误不一致,Fast-Paxos 为 (N-1)/3, Basic-Paxos 和 Multi-Paxos 为 (N-1)/2;
- Paxos 和 Raft 算法不能解决拜占庭问题;
- Raft 的建议性更适合作为区块链共识算法(仅仅作用域联盟链等可信网络的区块链系统)
参考文档:
5.3. BFT 算法
BFT 类算法,最主要的特点是,可以解决拜占庭问题,可以容忍在去中心化的分布式系统中存在部分恶意节点。
5.4. POW
POW(Proof Of Work):即工作量证明,简单说就是干的越多,收的越多。
依赖机器进行数学运算(通过 HASH 运算来寻找一个特征值)来获取记账权,资源消耗相比其他共识机制高、可监管性弱。同时每次达成共识需要全网共同参与运算,性能效率比较低,容错性方面允许全网 50% 节点出错。
优点:
- 算法简单,容易实现;
- 节点间无需交换额外的信息即可达成共识;
- 破坏系统需要投入极大的成本;
缺点:
- 浪费能源;
- 区块的确认时间难以缩短;
- 新的区块链必须找到一种不同的散列算法,否则就会面临比特币的算力攻击;
- 容易产生分叉,需要等待多个确认;
- 永远没有最终性,需要检查点机制来弥补最终性;
使用者:Bitcoin、Ethereum、Litecoin、Dogecoin 等。
5.5. POS
POS(Proof of Stake):即权益证明,也作股权证明,简单点说就是持有越多,获得越多。
POS 是 POW 的一种升级共识机制,根据每个节点所占代币的比例和时间,获得股份比例,拥有代币股份越多的人越容易获取记账权,等比例的降低挖矿难度,从而加快找随机数的速度。
优点:
- 节能,不需要无用计算;
- 在一定程度上缩短了共识达成的时间;
缺点:
- 安全性还需要更进一步的检验;
- 币如何产生和分配机制设计难度较高;
使用者:
- Ethereum(即将推出)、Peercoin、Nxt。
5.6. DPoS
DPoS(Delegated Proof of Stake):即股份授权证明机制或者受托人机制。DPOS与POS原理相同,只是选了一些“人大代表”。
从某种角度来看,DPoS 有点像民主大会,持币人选出几个代表节点来运营网络,用专业运行的网络服务器来保证区块链网络的安全和性能。DPOS机制中,不需要算力解决数学难题,而是由持币者选出谁说生产者,如果生产者不称职,就有随时有可能被投票出局,这也就解决了POS的性能问题。
为了方便理解,可以再举个例子。想象有这样一家公司:公司员工总数有 1000 人,每个人都持有数额不等的公司股份。每隔一段时间,员工可以把手里的票投向自己最认可的 10 个人来领导公司,其中每个员工的票权和他手里持有的股份数成正比。等所有人投完票以后,得票率最高的10 个人成为公司的领导。
如果有领导能力不胜任或做了不利于公司的事,那员工可以撤销对改领导的投票,让他的得票率无法进入前10名,从而退出管理层。这就是对 DPoS(Delegated Proof of Stake)共识机制的一个形象描述。
优点:
- 能耗低;
- 大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证(EOS 的块时间是 0.5 秒);
缺点:
- 拥有高权益的参与者可投票使自己成为一名验证者(这是近期已在 EOS 中出现的问题);
- 投票需要消耗时间,精力,导致投票的积极性并不高。绝大多数持股人(90%+)从未参与投票;
- 节点代理是人为选出的,公平性相比 PoS 较低;
- 同时整个共识机制还是依赖于代币的增发来维持代理节点的稳定性,很多商业应用是不需要代币存在的;
使用者:
- BitShares、Steemit、EOS、Lisk、Ark。
5.7. PoA(Proof of Authority,权威证明)
POA(Proof of Authority):即权威证明。
PoA 机制不挖矿也不需要 Token。在基于此 PoA 的区块链网络中,所有的交易和区块均由验证人(Validator)处理。PoA 平台的维护成本低,但在 PoA 中,交易和验证区块的验证人,必须是能通过可靠性审查的人。所以,PoA 的验证人必然非常关注自身声誉。声誉在 PoA 里就是非常重要的资产。一般情况下,验证人会公开自己的实际身份。目前,这种共识机制形成的区块链技术主要是应用在行业特征明显的联盟链、私有链上。
优点:
- 节能,维护成本相对较低;
- 出块效率高;
- 不需要代币;
缺点:
- 略为中心化;
- 虽然可用于公有区块链,但是更多用于私有区块链,许可区块链,联盟链等;
使用者:
- POA.Network、Ethereum Kovan testnet、VeChain,GE航空(GE Aviation)和沃尔玛(Walmart)的物流链、Giveth、Tomochain、Go-Chain。
5.8. PBFT
PBFT(Practical Byzantine Fault Tolerance):即实用拜占庭容错。
PBFT 算法中,有一个节点会被当做主节点,而其他节点都是备份节点。系统内的所有节点都会相互通信,最终目标是大家能以少数服从多数的原则达成数据的共识。
每一个共识过程分下面这四步:
- 客户端发一个请求给主节点去执行某个操作。
- 主节点广播这个请求到各个备份节点。
- 所有节点执行操作并把结果返回给客户端。
- 当客户端收到 f + 1 个来自不同节点的相同的结果后,过程结束。f 代表可能撒谎的节点的最大值。
从第 4 步也可以看出,只要客户端能保证多数人认可了一个相同的结果,这个结果就是最终的共识了。同时,为了保证主节点失效后,系统的活性,会触发视图切换。或者,如果主节点出现明显的撒谎迹象,其他的节点也可以联合起来更换主节点,触发视图切换。
- 优点:
- 不需要代币;
- 共识的时延大约在 2~5 秒钟,基本达到商用实时处理的要求;
- 共识效率高,可满足高频交易量的需求;
缺点:
- 仅仅适用于联盟链,私有链;
- 网络复杂度过高,可拓展性比较低,一般的系统在达到 100 左右的节点个数时,性能下降非常快;
- PBFT在网络不稳定的情况下延迟很高;
- 当有超过 (N-1)/3 个无效或者恶意节点时,系统无法提供服务;
使用者:
- Hyperledger Fabric、Stellar、Ripple、Dispatch、FISCO-BCOS
5.9. PBFT 衍生(dBFT,RPBFT)
dPBFT(Delegated Byzantine Fault Tolerance):授权拜占庭容错算法。
RPBFT(Rotation Practical Byzantine Fault Tolerance):轮流拜占庭容错算法。
dPBFT 和 RPBFT 原理跟 PBFT 类似,只是不是所有的节点都参与共识,而是将节点分为两种,共识节点和和验证节点:
- 共识节点
- 执行 PBFT 共识流程的节点,有轮流出块权限;
- 验证节点
- 不执行共识流程,验证共识节点是否合法、区块验证,经过若干轮共识后,会切换为共识节点;
共识节点之间通过 PBFT 算法达成共识,转发给验证节点进行验证。dPBFT 和 RPBFT 之间的区别仅仅是选择共识节点的算法不一样:
- dPBFT:根据权益投票选举;
- RPBFT:轮流将共识节点替换为验证节点)
- 优点:
- 不需要代币;
- 且由于算法复杂度与节点数无关,所以,性能衰减远小于 PBFT;
- 网络复杂度与节点规模无关,可扩展性强于 PBFT 共识算法;
- 共识效率更高,可秒级确认;
缺点:
- 仅仅适用于联盟链,私有链;
- 当有超过 (N-1)/3 个无效或者恶意节点时,系统无法提供服务;
使用者:
- FISCO-BCOS(RPBFT),Neo(dBFT)
6. 区块链类型x
现在的区块链,主要分为:公有链,私有链,联盟链、许可链。
公有链
- 公有链是开源的,全世界的人都可以参与,完全去中心化;
- 公有链是匿名的,通过节点之间的共识机制达到信任完成交易,公有链一般会通过代币机制来鼓励参与者竞争记账,来确保数据的安全性;
- 读写权限是对所有人开放的,任何人都可以接入;
- 常见的 BTC,ETH,EOS;
私有链
- 仅限在一个企业、组织以及机构内的用户访问和交易,参与节点的资格会被严格限制;
- 参与节点是有限和可控的,极快的交易速度、更好的隐私保护、更低的交易成本、不容易被恶意攻击;
- 常见可用于一些金融、审计机构,用以存放账本及数据(不能被篡改)的存放;
联盟链
- 若干个(大于一个)企业、组织以及机构共同参与管理的区块链;
- 常用语组织机构间的交易和结算,比如银行的对账等等;
许可链
- 参与到区块链系统中的每个节点都是经过许可的,未经许可的节点是不可接入系统中;
- 私有链和联盟链都属于许可链;
- 有些许可链没有代币机制,因为不需要代币来鼓励节点竞争记账;
7. 总结
这个世界上,没有任何事物是完美无缺的,对于共识机制而言也是。不同的共识机制都有自己的优缺点,甚至,有些共识机制就是是为解决一些特定的问题而生。
往往在评价一个共识机制时,不能单纯的用好或者坏来定义,要根据业务属性来判断,主要从场景、去中心化程度、记账节点、响应时间、存储效率、吞吐量和容错性等维度进行比较。
- 共识机制的多维度对比:
维度 | Pow | PoS | DPoS | PoA | Raft | PBFT (dBFT,RPBFT) |
---|---|---|---|---|---|---|
试用场景 | 公链 | 公链 许可链 |
公链 许可链 |
许可链 | 许可链 | 许可链 |
去中心化 程度 |
完全 | 完全 | 完全 | 半中心化 | 半中心化 | 半中心化 |
记账节点 | 全网 | 全网 | 选出若干 代表 |
部分授权 代表 |
一个 Leader | 动态决定 |
相应时间 | 10 分钟 | 1 分钟 | 3 秒左右 | 秒级 | 秒级 | 秒级 |
存储效率 | 全账本 | 全账本 | 全账本 | 全账本 | 全账本 | 全账本 + 部分账本 |
吞吐量 | 约 7 TPS | 约 15 TPS | 约 300 TPS 或更高 | 几千到万 | 几千到万 | 约 1000 TPS到几万 |
容错 | 50% | 50% | 50% | 50% | 50% | 33% |
实例 | BTC | Ethereum 2.0 | EOS | POA.Network | FISCO-BCOS | FISCO-BCOS, NEO |
鱼和熊掌不可兼得,区块链中的安全,性能以及去中心化三个方面,同样不可兼得。