PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法
实用拜占庭容错系统(PBFT)降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别(Polynomial),使拜占庭协议在分布式系统中应用成为可能。
节点角色:
Primary节点和普通节点,PBFT系统的Primary是轮流当选的,这和zab、raft不一样
- 主节点 p = v mod |R|
- p:主节点编号
- v:视图编号
- |R|节点个数
Primary角色分析
Primary节点的作用:
- 正常工作时,接收客户端的事务请求,验证request身份后,为该请求设置编号,广播pre-prepare消息
- 新Primary当选时,根据自己收集的View-Change消息,发送View-New信息,让其它节点同步数据
- Primary与所有的其它节点维系心跳
Primary节点地位和follower节点一样,并没有什么特权
如果Primary宕机,会因为心跳超时,而触发重新选举,保证系统运行稳定
如果Primary恶意发送错误编号的消息,那么会在后续的操作中,被follower察觉,因为 prepare和commit阶段都是会进行广播的,一旦不一致,view-change
如果Primary不发送接收到的request,client在超时未回复时,会重发request到所有的replica,小弟们发现primary竟然私藏消息,view-change
如果Primary节点篡改消息,因为有Request里面有data和client的签名,所以primary无法篡改消息,其它replica会先验证消息的合法性,否则丢弃,view-change
综上所述,限制了权限的Primary节点,如果宕机、或者不发生消息、或者发送错误编号的消息、或者篡改消息,都会被其它节点感知,并触发view-change。
算法介绍
容错率
raft算法的的容错只支持容错故障节点,不支持容错作恶节点,所以容错率高,过半节点正常即可
PBFT算法可以容忍小于1/3个无效或者恶意节点
作恶节点:除了可以故意对集群的其它节点的请求无响应之外,还可以故意发送错误的数据,或者给不同的其它节点发送不同的数据,使整个集群的节点最终无法达成共识,这种节点就是作恶节点。
论文来源
中文地址: https://blog.csdn.net/DeveloperRen/article/details/82771710
原始论文的地址: http://pmg.csail.mit.edu/papers/osdi99.pdf
辅助博客:https://www.jianshu.com/p/cf1010f39b84

-------------本文结束 感谢您的阅读-------------