排序服务在超级账本 Fabric 网络中起到十分核心的作用。所有交易在发送给 Committer 进行验证接受之前,需要先经过排序服务进行全局排序。
在目前架构中,排序服务的功能被抽取出来,作为单独的 fabric-orderer 模块来实现,代码主要在 fabric/orderer
目录下。
下面以 Kafka 作为共识插件为例,讲解 Orderer 节点的核心过程。
Orderer 节点(Ordering Service Node,OSN)在网络中起到代理作用,多个 Orderer 节点会连接到 Kafka 集群,利用 Kafka 的共识功能,完成对网络中交易的排序和打包成区块的工作。
Fabric 网络提供了多通道特性,为了支持这一特性,同时保障每个 Orderer 节点上数据的一致性,排序服务进行了一些特殊设计。
对于每个通道,Orderer 将其映射到 Kafka 集群中的一个 topic (topic 名称与 channelID 相同)上。由于 Orderer 目前并没有使用 Kafka Topic 的多分区负载均衡特性,默认每个 topic 只创建了一个分区(0 号分区)。
此外,Orderer 还在本地维护了针对每个通道的账本(区块链)结构,其中每个区块包括了一组排序后的交易消息,并且被分割为独立区块。
核心过程如下所示。
Broadcast()
接口。BatchSize.MaxMessageCount
或消息尺寸过大,或超时时间达到 BatchTimeout
,则发送分块消息 TTC-X 到 Kafka。收到分块消息 TTC-X,或收到配置交易,则切分消息为区块。
===== 关于 TechFirst 公众号 =====
专注金融科技、人工智能、云计算、大数据相关领域的热门技术与前瞻方向。
发送关键词(如区块链、云计算、大数据、容器),获取热门点评与技术干货。
欢迎投稿!