排序服务在超级账本 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 还在本地维护了针对每个通道的账本(区块链)结构,其中每个区块包括了一组排序后的交易消息,并且被分割为独立区块。

核心过程

核心过程如下所示。

  • 客户端通过 gRPC 连接发送交易信息到 Orderer 节点的 Broadcast() 接口。
  • Orderer 节点收到请求后,提取消息进行解析、检查,通过检查后封装为 Kafka 消息,通过 Produce 接口发送到 Kakfa 集群对应的 topic 分区中。
  • 当前收到消息数达到 BatchSize.MaxMessageCount 或消息尺寸过大,或超时时间达到 BatchTimeout,则发送分块消息 TTC-X 到 Kafka。
  • Kafka 集群维护多个 topic 分区。Kakfa 通过共识算法来确保写入到分区后的消息的一致性。即一旦写入分区,任何 Orderer 节点看到的都是相同的消息队列。
  • Orderer 节点在启动后,还默认对本地账本对应的 Kafka 分区数据进行监听,不断从 Kafka 拉取(Consume)新的交易消息,并对消息进行处理。满足一定策略情况下(收到 TTX-C 或配置消息)还会将消息打包为区块。

分块决策

收到分块消息 TTC-X,或收到配置交易,则切分之前从 Kafka 中收到的消息为区块,记录到本地账本结构中。

来源:https://github.com/yeasy/hyperledger_code_fabric/blob/master/process/orderer_workflow.md

Hyperledger Fabric Ordering Service过程的更多相关文章

  1. Hyperledger Fabric Membership Service Providers (MSP)——成员服务

    Membership Service Providers (MSP) 本文将介绍有关MSPs的设置和最佳实践的详细方案. Membership Service Providers (MSP)是一个旨在 ...

  2. Hyperledger Fabric Transaction Proposal过程

    客户端将交易预提案(Transaction Proposal)通过 gRPC 发送给支持 Endorser 角色的 Peer 进行背书. 这些交易提案可能包括链码的安装.实例化.升级.调用.查询:以及 ...

  3. HyperLedger Fabric基于zookeeper和kafka集群配置解析

    简述 在搭建HyperLedger Fabric环境的过程中,我们会用到一个configtx.yaml文件(可参考Hyperledger Fabric 1.0 从零开始(八)--Fabric多节点集群 ...

  4. Hyperledger Fabric 1.0 从零开始(十三)——orderer分布式方案

    简述 在搭建HyperLedger Fabric环境的过程中,我们会用到一个configtx.yaml文件(可参考Hyperledger Fabric 1.0 从零开始(八)——Fabric多节点集群 ...

  5. Hyperledger Fabric MSP Identity Validity Rules——MSP身份验证规则

    MSP Identity Validity Rules——MSP身份验证规则 正如Hyperledger Fabric Membership Service Providers (MSP)——成员服务 ...

  6. 深入解析Hyperledger Fabric启动的全过程

    在这篇文章中,使用fabric-samples/first-network中的文件进行fabric网络(solo类型的网络)启动全过程的解析.如有错误欢迎批评指正. 至于Fabric网络的搭建这里不再 ...

  7. Fedora 25-64位操作系统中安装配置Hyperledger Fabric过程

    安装过程参照Hyperledger Fabric的官方文档,文档地址:http://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html 0 ...

  8. Hyperledger Fabric的test-network启动过程Bash源码详解

    前言 在基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例中,我们已经完成了Fabric 2.4的环境搭建及fabric-samples/test-network官 ...

  9. Hyperledger Fabric Chaincode for Operators——实操智能合约

    什么是Chaincode(智能合约)? chaincode是一个程序,它是使用Go语言编写的,最终在Java等其他编程语言中实现了指定的接口.chaincode运行在一个被背书peer进程独立出来的安 ...

随机推荐

  1. HihoCoder 1097 Prim算法

    1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以 ...

  2. 剑指offer-第六章面试中的各项能力(二叉树的深度)

    题目:1:输入一个二叉树,求二叉树的深度.从根节点开始最长的路径. 思路:我们可以考虑用递归,求最长的路径实际上就是求根节点的左右子树中较长的一个然后再加上1. 题目2:输入一颗二叉树的根节点,判断该 ...

  3. 剑指Offer-第一章面试细节总结

    面试细节:行为面试(20%)+技术面试(70%)+应聘者提问(10%) * 行为面试:跳槽者(不要抱怨老板,不要抱怨同事,只为追寻自己的理想而站斗) * 技术面试:1.基础知识点(编程语言,数据结构( ...

  4. HttpWebRequest传值

    From:发送方 class Program { static void Main(string[] args) { string strId = "zhangsan"; &quo ...

  5. eclipse 中xml文件的字体改不了

    XML Editor的改不了. 修改colors & fonts里的eclipse中打开window->prefece->generation-basic 下 Text Edito ...

  6. ajax同步异步

    test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js f ...

  7. tp5下通过composer实现日志记录功能

    tp5实现日志记录 1.安装 psr/log composer require psr/log 它的作用就是提供一套接口,实现正常的日志功能! 我们可以来细细的分析一下,LoggerInterface ...

  8. zabbix的sendEmail配置

    zabbix的sendEmail配置 [root@hongquan scripts]# yum install sendmail[root@hongquan soft]# tar xvzf sendE ...

  9. Node.js的原型继承函数util.inherits

    util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数.JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同.Jav ...

  10. getpass密码隐藏

    使用getpass模块对输入的字符进行隐藏输入 #-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import getpass u ...