关键词:
共识算法
Raft
分布式系统
零知识证明
秘密共享
摘要:
分布式系统由一组分布在不同地理位置的计算机节点组成,分布式系统的出现弥补了单机系统存储和计算能力不足的缺陷,具备高可靠性、可扩展性和快速响应等优势。然而,与单机系统相比,分布式系统面临更复杂的问题,如负载不均、通信异常等挑战。共识算法作为分布式系统的关键组成部分,有助于确保系统就特定数据或客户请求达成一致,从而保证系统稳定运行。目前最流行的共识算法之一是Raft算法,其主要依赖领导节点进行日志写入和读取,具备较高的共识效率。然而,在实际应用中,网络分区和网络拥塞等问题可能导致领导节点不稳定,造成系统短暂不可用,进而降低系统的响应效率。同时,Raft算法中的领导节点作为系统向外提供服务的核心节点,在选举过程中缺乏验证机制,可能存在伪造投票的潜在问题。
为了提高分布式系统的可用性,本文在Raft基础算法的基础上针对在网络分区和局部网络拥塞等场景中可能出现共识效率低下问题进行改进。提出一种新的选举算法——Raft NLT选举算法,该算法分离了选举阶段和日志复制阶段的逻辑时钟,并引入了投票权标记机制,增强Raft算法的可理解性。同时,Raft NLT选举机制特性使得领导者节点能够通过监测next Leader Term属性值,及时发现集群中的干扰节点,从而提高系统的共识效率。经过测试,相较于Raft基础算法,在局部网络通信不畅的情况下,融合Raft NLT选举算法的共识机制能够有效避免了不必要的选举,增强了领导节点的稳定性,从而显著提升了系统的可用性。与原文作者提出的带Pre-Vote阶段的选举算法相比,Raft NLT算法在选举过程中至少节省了一轮网络通信,选举效率更高。
原有的Raft基础算法仅适用于非拜占庭环境下的共识,没有对候选节点行为进行验证,确保选举成功节点的真实性。为解决这一问题,本文提出了基于可验证秘密共享的选举算法,在改进选举算法Raft NLT的基础上增加了选票验证,将选票收集转化成收集子秘密和恢复秘密的过程,同时,候选者节点通过非交互式零知识证明向其他节点展示选举成功的依据,从而解决了Raft算法存在的伪造投票问题。经验证,选举验证阶段在一定程度上降低了选举效率,但其可验证性给Raft NLT带来选举安全,避免因候选者节点节点因伪造选票而导致同一任期出现多领导者节点的情况。