前面几个博客文章已经介绍了这三种BFT共识技术,其中PBFT是比较早的实用BFT算法。Aardvark/RBFT都是在其之上的改进。
以下说明差异:
共识协议:
- PBFT: 采用三阶段算法保证节点之间的一致性。
- Aardvark:同PBFT。
- RBFT:在PBFT的基础上前置了PROPAGATE阶段且client需要广播消息而不是只给“primary”,用以保证好的replica一定能够收到请求。
- PBFT: 从节点有timer来监控请求的执行。如果timer超时,则会认为primary有问题,触发view change。
- Aardvark replica会监控节点性能。1、primary需要满足最低吞吐量阈值,而replica会逐渐增加这个阈值,最终使primary无法满足而触发view change。2、replica有timer,会监听pre-prepare消息,如果超时也会触发view change。
- RBFT: 通过replica监控来触发:1、master的吞吐量比backup的平均吞吐量低超过阈值。2、每条请求有最大执行时间。3、client在不同的replica之前的请求时间差异阈值。满足之上的3个任意一个都会触发view change。view change 会改变所有的实例primary。
- Aardvark 网络分隔(多网卡),独立队列、轮询获取请求、MAC-签名混合验证、p2p技术取代广播、重试碰撞规避、cache、黑名单等机制,更主动的view change策略。
- RBFT 多线程模型执行多个PBFT实例,协议上增加PROPAGATE阶段需要client广播请求。同样采用MAC-签名混合验证黑名单等机制。view change策略改变。
推荐阅读
- go-raft实现
- Raft结构源码解析
- 安全|拜占庭故障
- hyperledger|pbft流程深层分析和解释
- blockchain|共识算法-PBFT
- 区块链|从寻找下一个币安,到寻找下一个Uniswap
- 关于实用拜占庭协议 vs 实用同步拜占庭协议
- 区块链|【我的区块链之路】- 谈一谈拜占庭问题的解及PBFT(拜占庭容错)
- 共识算法|拜占庭将军问题的深入思考