Fabric Orderer的共识算法是可插拔的,包括Solo、Kafka、Raft,其中Raft算法是在Fabric v1.4版本中新增的,未来还将加入BFT算法。本文会对已实现的3个共识算法进行剖析。
一、Solo
Solo算法中只有一个orderer节点,用于开发阶段的实验。一个Orderer节点不存在共识的问题,该节点接收所有来自客户端的交易,然后将其排序并产生区块,如下图所示:
二、Kafka
所有的orderer都会连接kafka集群,而orderer之间并没有直接的连接,如下图所示:
所有trasaction的排序依赖于kafka,kafka的partition里面的数据均是按时间进行排序的,因此可以帮助Orderer集群进行排序。
那么基于kafka排序,是如何做到orderer集群上的所有节点都产生相同区块的?
- 以交易数量分割区块是容易的,对任意的OSN来说,都会得到相同的区块。
- 但是基于时间分割区块,各个节点的时间是有偏差的,所以需要各个节点间明确的协调信号。