An Improved Blockchain Consensus Algorithm Based on Raft(Raft算法改进区块链效率

  • Raft现存问题
    • Raft::日志复制和leader选举


      节点信息复制过程
    • leader节点性能成为瓶颈。改进:利用follower节点空闲的带宽资源优化共识效率。
    • 没凑够半数选票而进行多轮选举。改进:改选机制
    • 名词延申:
      • term::仍然一个任期里一个leader
      • Epoch:follower节点一轮共识中交流多条日志信息,是信息收集的基本单元
      • Log segment indexing:用日志段对每一轮数据进行索引。其目的是掌握当前的日志信息的容量大小,日志的顺序,追随者节点对应于其他日志,和其他信息,以促进从动件的匹配和交换节点日志信息中设置日志复制阶段。

  • 基于投票的领导人选举改进变化机制:票数较多的候选节点可以捕获票数较少的候选节点的选票,防止多个候选节点之间的竞争导致僵局的情况。投票选举阶段,预先定义了描述发起者和调用者的RequestVote RPC状态信息,并添加了RequestCompare RPC状态来比较候选节点之间的投票数
    • RPC执行如下:代持思想?
      • 如果term<currentTerm,候选人的term号小于follower节点的term号,则RequestVote RPC返回(term, false),提醒候选人候选人的term号已经过期并拒绝投票
      • 如果term>currentTerm,并且follower节点之前没有为另一个候选节点投票,则返回(term, true, id, hash),表明投票在这个术语期间被发送到这个候选节点。如果follower节点在此之前已经投票,则RequestCompare触发RPC比较投票请求。
      • 如果term<currentTerm,即RPC启动器的term号小于接收者的,返回(term, false),提醒另一方term已经过期并更新term号。否则,如果发起方CandidateVoteNum小于接收者,则接收者返回(term, false),发起方的候选节点自动变为follower状态,并通知从属follower节点更新投票所属信息
    • 分派思想的日志复制
      • 从缓冲区提取少于等于现存Follower节点数的日志信息段,follower反馈给leader并广播给其他节点,leader根据follower节点的确认信息,在时间约束下,随机重发日志消息给没有收到confirm消息的active follower节点,直到收到超过半数的follower节点的confirm消息
      • Leader节点通过commitParagIndex参数观察全网段索引日志的RPC确认情况,并不断向外界广播段日志集合中段索引日志的RPC确认情况。对尚未达成半共识的消息进行日志记录。
    • broadcast transaction proposal算法负责遍历节点列表,将相应的日志消息分配给不同的节点,并通过mapLog数组记录这些消息,如algorithm所示

    • 计数follower节点的返回应答,随机选择active节点发送在超时时间中未达到一半标记的事务提议 交易协议,

    • 计数从follower节点返回的 AckParagIndex信息直到一半以上节点都返回确认反馈

    • 分派思想下follower节点的具体步骤。分为AppendLeaderEntries()函数:从leader和follower节点接收日志复制信息。AllCommit()给leader反馈确认信息。

    • 一旦当前轮日志复制请求RPC的AckParagIndex参数达到一半或以上,则可以提交当前轮日志项收集。


      leader节点基于分配思想,将前一轮中超过一半节点的日志集合的哈希值一致作为自己节点在选举完成时的正确性依据。 如果发现领导节点的账本出现故障,可以通过不断与其他follower节点交互,回溯超过一半的哈希值来correct自己的日志集,以确保领导节点的强一致性。 如果follower节点的账本不一致但没有down,则可以请求将该账本复制到已经完成日志集回溯的leader节点,而不影响follower节点正常参与日志复制请求的最新epoch
  • 限制机制补充描述算法:
    • 在提交每一轮日志收集之前,必须收集到当前一轮日志共识中一半以上节点的结果。对于已在网络中提交的每一轮日志共识,至少有一半的节点具有该轮共识的本地提交结果。
    • 改进的Raft算法的每一轮提交日志集都必须包含前一轮日志集的哈希值
    • leader节点不是一个独裁leader节点。领导节点的账本正确性来自于选举完成后对总帐进行自我校正。领导节点通过心跳包收集上一轮日志集一致值的一半以上的哈希值,从而维护自己上一轮日志集的正确性。
    • 回退机制保证崩溃带来的段索引分类账的不一致性,在选举完成后,每个节点放弃对最近一轮的段索引日志集的恢复,并恢复到之前固定的轮数日志本

猜你喜欢

转载自blog.csdn.net/qq_56061892/article/details/126134580