Page 236 - 《软件学报》2026年第1期
P. 236
彭泽顺 等: 面向跨地理区域联盟链的事务处理技术综述 233
题. 区块首先在组内的高速网络下进行共识, 以防止节点的拜占庭行为, 随后被发往其他组完成分组间复制, 以防
止某些分组由于故障等原因宕机导致区块丢失.
按照分组间区块的复制策略可以将分层共识算法分为两层共识算法和树形共识算法.
1.1.1 两层共识协议
两层共识算法针对跨域公网环境和域内高速网络环境设计, 在降低总体延迟的同时提升了吞吐率. 该方法简
单直观, 延迟较低, 发送方分组 (通常由分组的主节点) 将区块通过共识协议或直接发送到接收方分组. 表 1 给出
了两层共识算法和系统对比.
表 1 两层共识算法和系统
系统 年份 容错模型 底层共识 顶层共识
Steward [50] 2008 BFT PBFT Multi-Paxos
Blockplane [54] 2019 BFT PBFT Paxos
GeoBFT [31] 2020 BFT PBFT 直接广播
D-Paxos [55] 2016 CFT Multi-Paxos Paxos
C-Raft [56] 2020 CFT Fast Raft Fast Raft
Steward [50] 首次提出了两层共识协议. 该协议在组内运行拜占庭容错 (Byzantine fault-tolerant, BFT) 的共识协
议 PBFT, 保证分组内节点做出决策的一致性, 同时屏蔽拜占庭节点. 每个组选出一个主节点代表该组与其他组通
信, 这些主节点间使用仅崩溃容错 (crash fault-tolerant, CFT) 的共识协议 Multi-Paxos, 确保在分组宕机时可用. 为
了防止分组内主节点的拜占庭决策, 主节点产生的决策必须经由组内共识后才能发送到其他分组. 为了防止其他
分组的接收者节点是拜占庭节点而拒绝接收消息, 主节点需要将共识消息广播到每个组的所有节点. 当主节点拜
占庭或宕机时, 分组内其他节点启动 PBFT 的视图切换 (view-change) 来选取新的主节点替换该拜占庭节点.
2
Steward 的两层共识协议将跨域通信复杂度从 O(N ) 降到了 O(M ), N 和 M 分别为节点数和组数. 这是因为跨
2
域通信开销由所有节点的全连接通信降到了分组主节点间的全连接通信. 但是, 将节点分组也相应地降低了 BFT
容错. 相对于 PBFT 等扁平共识协议最多容忍的全局 1/3 拜占庭节点, Steward 只能容忍分组内不超过 1/3 拜占庭
节点和不超过 1/2 分组宕机.
如图 1 所示, Steward 的两层共识算法流程如下. 1) 为了避免跨域网络协调开销, 用户将请求发送到位于相同
分组的主节点. 2) 在收到用户请求后, 主节点构建包含请求的 Propose 消息, 并发起全局 Paxos 将其复制到其他分
组. 为了保证请求有效性, Propose 消息需要通过本地 BFT 共识并收集到 f +1 签名 ( f 为分组内拜占庭节点数).
3) 当收到 Propose 消息时, 分组主节点构建 Accept 消息作为回复. 因为作为 Accept 消息输入的 Propose 消息已经
f +1 的签名回复后即可将 Accept 消息广播到其他分组. 4) 当收到超过半数其他
被确定, 领导者仅在收到分组内
分组的 Accept 消息时, 即可认为请求已经全局完成复制, 此时该请求可以被安全地提交和执行.
Blockplane [54] 设计了 BFT 容错的分层框架, 针对跨组复制和组内提交分别设计了对应 BFT 原语, 并基于上述
原语提出一种跨域共识算法. 类似于 Steward, Blockplane 的两层共识算法分别采用 PBFT 和 Paxos.
GeoBFT [31] 同样采用了两层共识架构, 并进一步减少了跨域通信开销和跨域协调开销. 如图 2 所示, 在减少跨
域通信开销方面, GeoBFT 在跨域日志复制时, 主节点仅将日志复制到每个接收域的 f +1 个节点上, 而非复制到所
有节点. 由于 f +1 节点至少包含一个非故障节点, 节点本地广播收到的请求可确保域内所有诚实节点收到日志.
在减少跨域协调开销方面, GeoBFT 采用了直接跨域广播日志的方法, 并没有使用全局 CFT 共识. 采用直接广播可
以将跨域协调次数由 3 次降低到 1 次 (1.5 RTT 降低到 0.5 RTT), 但牺牲了区域容错. GeoBFT 不能在网络分区或
数据中心停电等情况造成的组失效时保证共识的正常进行. 为了防止发送方的领导者为拜占庭节点, GeoBFT 设
计了远程视图切换协议. 当领导者拒绝跨域转发消息, 或领导者的跨域网络故障时, 接收域可通知发送域更换领导
者. GeoBFT 还采用了多主共识算法, 所有分组可以并发接收并执行区块 (见第 1.2 节).
D-Paxos [55] 和 C-Raft [56] 为崩溃容错的两层共识算法. D-Paxos 采用 Multi-Paxos [57] 做底层共识并采用 Paxos 做

