共识协议|PBFT/Aardvark/RBFT差异

前面几个博客文章已经介绍了这三种BFT共识技术,其中PBFT是比较早的实用BFT算法。Aardvark/RBFT都是在其之上的改进。
以下说明差异:
共识协议:

  • PBFT: 采用三阶段算法保证节点之间的一致性。
  • Aardvark:同PBFT。
  • RBFT:在PBFT的基础上前置了PROPAGATE阶段且client需要广播消息而不是只给“primary”,用以保证好的replica一定能够收到请求。
【共识协议|PBFT/Aardvark/RBFT差异】view change:
  • 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。
与PBFT比的创新点:
  • Aardvark 网络分隔(多网卡),独立队列、轮询获取请求、MAC-签名混合验证、p2p技术取代广播、重试碰撞规避、cache、黑名单等机制,更主动的view change策略。
  • RBFT 多线程模型执行多个PBFT实例,协议上增加PROPAGATE阶段需要client广播请求。同样采用MAC-签名混合验证黑名单等机制。view change策略改变。

    推荐阅读