区块链技术Fabric区块链

Hyperledger Fabric 共识原理和源码分析

2018-04-11  本文已影响568人  kamiSDY

基于Fabric 1.0.0以后版本,目前fabric提供的共识算法有三种:solo,kafka和PBFT

目前,Fabric的整体共识(Kafka)分为两个步骤:

  1. 不能容忍作恶。也就是说,针对恶意的数据(或者说input)没有能力进行识别和处理。它能处理什么?看第二点
  2. 基于Zookeeper进行paxos算法。paxos算法保证在orderer集群中,最终能够形成一个有效的输出结果,能够容忍一定的失效节点。在换句话说,能够容忍的错误就是某一个(一些)orderer节点不能用了,无论是无法处理请求、宕机,还是掉电。超过半数orderer集群的信息就没办法保证一致性。

这之后就是我瞎说的,请勿相信,发上来就是想大家一起讨论。
今天偶然看了一眼CAP,其中有一句话:

这篇论文证明了两个非常有意思的理论,首先是在异步的网络模型中,所有的节点由于没有时钟仅仅能根据接收到的消息作出判断,这时完全不能同时保证一致性、可用性和分区容错性,每一个系统只能在这三种特性中选择两种。

说的是CAP论文中的观点。其中没有时钟这前提条件非常重要。也就是如果有全局时钟,每个节点的时钟误差绝对值都不超过在消息传递的时间最小单位。那么我们针对信息打上时间戳,每个节点什么时候接受,都能够针对这些消息进行排序,然后处理,并最终得到一个有效的结果。我们只需要关注网络内最新的消息的sender、content就可以。

拉回fabric,我们可以发现,其实orderer在的目的就是为所有的tx输入,提供了一个类似时序机制的模块。虽然client提交的tx,peer发起的endorsement都是并发的,无序的。但是,经过orderer的整合之后,会将其整理成一个有序的输出。这就是orderer的核心价值。peer在需要的时候从orderer中pull到的需要打包的tx序列(读写集)就是(maybe)确认后的执行的结果。然后在进行验证写入账本并在网络上传播。
那么,多个orderer和单个orderer的区别就是备份,提高系统可用性。防止单点宕机无法提供服务的情况。同时orderer节点的分离式部署以及维护是否能够在将来构想更多的共识算法的可能性也未可知。
不过,这么感觉这一步分离以及tx的两段式打包,感觉还是有那么点意思。

我一直对fabric提出的共识可插拔表示怀疑,特别想把这块搞清楚。不过这就得看源码了。进一步的源码分析,稍后再添加。
(未完待续)

参考链接

上一篇下一篇

猜你喜欢

热点阅读