排序服务在超级账本 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. 数据结构之最小生成树Prim算法

    普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树算法 基本思想:对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最 ...

  2. Redis常见面试题总结

    Redis面试题总结(1) 2018年02月28日 17:42:21 LSX丨笔头先生 阅读数:3568更多 个人分类: 面试题总结   (1)什么是redis? Redis 是一个基于内存的高性能k ...

  3. 分布式使用Redis

    为什么我们做分布式使用Redis? https://www.cnblogs.com/yaodengyan/p/9717080.html 绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只 ...

  4. ORA-12154,TNS错误解决办法

  5. Oracle相关数据库操作

    1.进入oracle后台操作 su - oracle 2.数据库备份的指定位置 Oracle用sys用户登录查询数据库 select * from dba_directories a where a. ...

  6. 笔记:C 编译过程

    笔记:C 编译过程 参考了 编译器的工作过程 1 C 编译过程 配置 确定标准库和头文件位置 确定依赖关系 头文件的预编译 预处理 编译 连接 F4NNIU 2018-06-12 编译器的工作过程 h ...

  7. MySQL-5.7中InnoDB表数据文件存储位置

    学习地址:https://www.cnblogs.com/tongxiaoda/p/7874535.html

  8. shell中的输入输出和编程中的变量(shell 03)

    shell中的输入输出标准输入:键盘标准输出:终端显示器>> 追加是换行追加的echo -n 不尾随换行符 -e 启用解释反斜杠的转义功能 -E 禁用解释反斜杠的转义功能(默认) --he ...

  9. (转)Oracle游标使用全解

    -- 声明游标:CURSOR cursor_name IS select_statement --For 循环游标 --(1)定义游标 --(2)定义游标变量 --(3)使用for循环来使用这个游标 ...

  10. Firewalld常用命令

    原文地址:http://www.excelib.com/article/288/show Firewalld防火墙中所使用到的命令可以分为三大类:安装卸载.维护和策略操作. 安装 在Centos7中默 ...