撸了一整天Aardvark,总结记录一下,可能有些地方理解的也不是很到位。
Aardvark: http://static.usenix.org/events/nsdi09/tech/full_papers/clement/clement.pdf
摘要:
提出了构建BFT系统的新方法。目前的BFT系统运行的很快,但是都不能很好的应对拜占庭错误。只要一个坏的client就能让包括PBFT、Q/U/、HQ、Zyzzyva等系统不可用。所以论文提出了1、现有协议的缺点;2、在拜占庭错误发生时系统可用的原则。3、提出构建BFT系统的新方法:Aardvark。其性能在无拜占庭错误和有拜占庭错误差异不大。
介绍:
Aardvark的性能在有没有拜占庭错误基本一致。而其他的就不行啦,在primary坏掉或者副本恢复的时候都可能造成如此严重的情况。本文提出的算法,更改了以往的思路,不注重极限的性能,在保证可以接收的吞吐量的情况下更广泛的去处理错误发生的情况。Aardvark在某些方面跟其他的BFT算法类似,都是client请求primary,但是其他的方面却很大不同。
Aardvark采用签名认证而之前的系统尽力避免它、采用常规的view-change而之前的技术则是做为最后的选择,p2p技术而之前的系统多采用IP广播。看起来Aardvark这些选择都会降低了吞吐,但是实际看来降低的有限却在容错上有很好的表现。
系统模型:
节点N=3f+1 f为最大拜占庭错误节点数。 客户端可以任意多为恶意节点。恶意节点可以串谋但无法解决密码学加密问题。异步网络条件下有个同步时间间隔,消息会在有限的延迟时间里提交。
定义1:(Synchronous interval):同步时间间隔里,任意消息会在一个有限的时间T内得到执行(有重发策略)。
定义2:(Gracious execution):所有的节点以及客户端都是好的。
定义3:(Uncivil execution):最多f个节点是拜占庭节点、可以有任意多个恶意client。
目前的BFT系统具有着误导性、危险性、徒劳性。