raft算法的通俗讲法,raft算法论文翻译

  

  在分布式概念提出后不久,为解决分布式系统中的各种分布式一致性问题,paxos算法应运而生。然而,paxos由于其众多的概念和复杂的设计而不受欢迎。后来,raft算法登上了历史舞台。raft算法属于paxos的简化或进化,更容易理解和实现。   

  

  Raft算法是分布式系统开发的首选一致性算法。比如etcd,tidb,领事,卡夫卡等。都实现了Raft算法来解决系统中的分布式一致性问题。   

  

  现在的分布式系统,如分布式数据库,为了提高系统的并发性,往往采用碎片化措施。为了保证每个分片的可靠性,每个分片都会添加多个副本。同时,系统中会有一个主进程,负责存储整个集群的元数据信息(包括每个工作机的状态信息,切片副本与机器的映射关系等。),并提供切片调度策略(比如添加一个表,向其中写入一条数据时,应该划分多少条数据切片?每个相应的拷贝应该放在哪个机器上?)等等。为了保证主设备的高可用性,通常会有热备,即会有多个备份主设备。那么对于这样的分布式系统,在设计时应该考虑哪些分布式共识问题呢?   

  

  raft将分布式系统中存在的一致性问题分解为几类:日志复制、领导者选举、安全性、成员变更等。   

  

  日志复制问题   

  

  每个切片都有多个副本。数据写入时,多份拷贝如何对这份数据达成一致性协议?   

  

  leader选举问题   

  

  如何保证师父随时可用?解决方案是分布式选举主节点,即当主节点失效时,从多个备份主节点中选出一个新节点作为主节点。那么有了这么多的备份主,谁会成为新的主呢?当原始主服务器恢复时,如何确保集群中不会同时有两个主服务器?   

  

  安全性问题   

  

  如果节点是有状态节点,备份主节点需要从主节点复制数据,以保证主节点数据的可靠性。对于数据复制,可以选择强一致性和最终一致性。如果为了性能而采用最终一致性,那么在选举中,选出的主节点可能会出现节点数据落后的情况,从而导致数据丢失。那么如何才能保证所选的备份主在领袖选举期间保持最新最完整的数据呢?   

  

  成员变更问题   

  

  在日常工作中,集群中的服务器数量会发生变化。比如,随着数据量的不断增加,为了不断提高系统的吞吐量,我们需要对系统进行横向扩展,也就是增加分区数量,我们需要增加集群中的服务器数量,这就是所谓的成员变化。会员变更会带来什么样的风险?在更改集群成员时(例如,添加2台服务器),如果集群中存在网络分区,可能会导致集群分裂,出现2个领导者。   

  

  稍后让我们继续分享raft对每一类问题的具体解决方案。   

相关文章