胡豆秆

个人博客

欢迎来到我的个人博客~


Fabric排序服务

Fabric排序服务

​ Fabric排序服务的功能是将从应用程序接收到的交易进行排序、分组并生成区块,再发送给记账节点

逻辑架构

  • Broadcast:接收客户端发来的请求(交易)

  • Deliver:用于区块同步(排序节点之间、记账几点)

    一、Peer使用Deliver获取最新区块

    ​ Peer主节点在加入通道后,会随机的向orderer注册区块事件,有新区块写入Orderer账本时,Orderer把区块发送给Peer

    二、Orderer使用Deliver获取其他Orderer的历史区块

    Raft共识中:

    1. 如果有Orderer节点慢,会向其它Orderer节点同步已经完成共识的区块,即历史区块
    2. 新加入的Orderer节点,从其它Orderer节点同步区块
  • Register:数据有多条链,用于数据相互隔离

  • Solo:共识算法,只有一个排序服务,负责接收交易信息并排序。去中心化、不支持拜占庭容错

  • Kafka:共识算法,高吞吐、低延时。支持节点故障容错,不支持拜占庭容错

  • Raft:共识算法,简称拜占庭算法,支持拜占庭容错、可靠排序算法、容忍节点故障以及一部分恶意节点

  • BlockCutter:切块。将收到的交易切块分组

    BlockCutter有个缓冲区,用来存放待切块交易,切块把若干交易分成多个组,每组交易会打包到一个区块中

    有三个可配置参数:

    • 缓冲区内交易的数量,达到区块包含的交易上限(默认500)
    • 缓冲区内交易总大小,达到区块大小上限(默认10mb)
    • 缓冲区存在交易,并且未出快时间,达到切块超时时间(默认2s)

    有一个不可配置项:

    • 缓冲区收到配置交易,配置交易要放到单独区块,如果缓冲区有交易,缓冲区已有交易会切到一个区块
  • CreateBlock:创建区块。分组后的交易创建区块

    把切块的交易打包到一个区块

    • 交易序列化,作为区块Body
    • 创建区块头,设置交易中的Hash
  • MsgProcessor:检查消息(交易)是否合法

    Order收到交易后会进行多项检查,不同的通道可以设置不同的MspProcesso,进行不同的检查

    分为两个:

    • 应用通道:StandardChannel

    • 系统通道:SystemChannel

    StandardChannel会对交易进行以下检查:

    • 交易内容不能为空
    • 交易大小不能超过区块大小最大值(默认10mb)
    • 交易签名是否符合签名策略
    • 签名者证书是否过期

    SystemChannel比StandardChannel多一项检查:系统配置检查,配置项是否缺失或者此配置项是否允许更新等

  • BlockWriter:将区块写入排序服务的账本

    把区块写入账本,即本通道的区块文件

    • 设置区块元数据(签名、配置区块高度、order相关元数据)

    区块元数据:

    • 区块签名,存放order对区块的SignatureHeader
    • 最新配置区块的高度,方便获取当前区块最新配置
    • 交易过滤,为数组,存放区块内所有交易的有效性,使用数字代表无效的原因,有验证交易的记账节点填写
    • order相关元数据,不同的共识类型,该元数据不同
  • Cluster:Raft共识算法相关

  • RPC:负责节点间通信

  • BlockPuller:区块同步。新节点或者慢节点的同步

交易处理流程

Raft共识流程

Raft共识数据流

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦