分布式一致性协议Raft-从入门到爱上

Raft的诞生

在分布式领域,始终都要面临的一个挑战就是:数据一致性。它是指数据在各个机器节点上流转的时候,如何保证任一时刻数据都是正确并且最新的。为此,莱斯利·兰伯特(Leslie Lamport)在1990年提出了一种实现算法,也就是著名的Paxos。如今它是业界公认此类问题的最有效解。虽然Paxos在理论界得到了高度认可,但是却给工程界带来了难题。因为这个算法本身比较晦涩,并且抽象,缺少很多实现细节。这让许多工程师大为头疼。天无绝人之路。几十年后,希望的曙光出现了。来自斯坦福大学的两位仁兄 Diego Ongaro 和 John Ousterhout 在“In Search of an Understandable Consensus Algorithm (Extended Version)”一文中正式引入 Raft。并在论文开篇就表明Raft是为解决Paxos难以理解和实现的问题而提出的。从此,Raft一炮走红。

初识Raft

Raft 算法的工作流程主要包含五个部分:

  1. 领导选举(Leader election):在集群初始化或者旧领导异常情况下,选举出一个新的领导。
  2. 日志复制(Log replication): 当有新的日志写入时,领导能把它复制到集群中大多数节点上。
  3. 集群成员变更(Cluster Membership changes): 当集群有扩容或者缩容的需求,集群各节点能准确感知哪些节点新加入或者被去除。
  4. 日志压缩(Log compaction): 当写入的日志文件越来越大,重启时节点回放(replay)日志的时间将无限延长,并且新节点加入集群时传送日志文件也会无限拉大。需要定期对日志文件进行重整压缩。
  5. 读写一致性(Read/write consistency): 客户端作为集群的外部组件,当一个客户端写入新数据时,能保证后续所有客户端都能读到最新的值。

从上面可以看出,Raft 算法涵盖的内容很多。如果一条条逐个讲解,对于一个初学者来说,无异于“一口吃下一个胖子”,这显然不切实际,也会让人淹没在细节的海洋中,失去对算法的全局认识。所以本文采用“突出主要问题,忽略其次细节”的方法先让大家对其最核心的部分,领导选举和日志复制有一个深入理解。

Raft为什么是正确的

理解一个算法,最重要的是要知道如此设计的正确性。学习算法的思想,才能真正理解,继而分享和交流。上来就讲实现细节,很难产生共鸣。

那怎么论证Raft的正确性呢?要科学地论证一件事,一般有两种方法。

  1. 使用精巧的数学方程推导。这是最严谨的方式。
  2. 使用归纳假设推理。通过一步步逻辑推理最终归纳出结论。

本文采用第二

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值