分享

Raft了解分布式共识

 新用户26922hFh 2022-01-10

  分布式共识是分布式计算领域中最难解决的问题之一,并且已经有很多设计和算法可以解决该问题。

  在本文中,我们将讨论Raft分布式共识算法,它是目前最流行的现代共识算法之一。

  什么是分布式共识?

  在开始讨论之前,让我们尝试了解分布式共识的含义。 在设计分布式系统时,我们必须创建带有分布在多个节点上的软件应用程序的系统。 这些运行时通常需要在不同节点上运行,以共同制定决策和共享数据。

  Raft了解分布式共识

  > The consensus in the real world — a group of people agreeing on something : (source)

  因此,在分布式共识中,节点集合作为一个连贯的组工作,并且可以在某些成员失败的情况下幸免。

  为什么选择RAFT?

  Raft是一种现代,可靠且相对简单的分布式共识算法,经常在现代软件解决方案中使用,例如Consul,etcd,RabbitMQ等。

  在Raft诞生之前,Paxos(由Leslie Lamport设计)是最受欢迎的针对分布式共识设计的算法之一。 因此,许多分布式共识算法都基于Paxos或从中得到启发。 但是,Paxos被认为是一种非常复杂的算法,难以实现以满足其性能和正确性要求。

  Raft背后的主要动机之一是设计一种分布式共识算法,该算法可以提高可理解性而又不影响性能和正确性。 Raft的作者(Diego Ongaro和John Ousterhout)认为Raft优于Multi-Paxos协议,因为它通过保持性能和正确性来增强可理解性。

  基本原理

  在深入探讨之前,让我们看一下Raft共识算法的一些基础知识。

  Raft基于领导者驱动的共识模型,其中将选举一位杰出的领导者,而该领导者将完全负责管理集群。 领导者管理形成Raft群集的所有节点之间的复制日志。

  为了了解Raft算法的基本术语,让我们看一下五个节点之间的共识情况,并了解Raft如何实现它。 因此,如图1所示,将在启动过程中选择集群的Leader(S1),并为来自客户端的所有命令/请求提供服务。 Raft群集的所有节点都维护一个分布式日志(复制日志)以存储和提交由客户端发出的命令(或日志条目)。 领导者接受来自客户端的日志条目,并在Raft集群中的所有关注者(S2,S3,S4,S5)之间复制它们。

  Raft了解分布式共识

  > Figure 1 — Raft Cluster: Leader, Followers, Clients, and Distributed Log.

  在Raft群集中,需要提供最少数量的节点才能提供预期的级别共识保证。 这称为法定人数。 在Raft集群中执行操作所需的最少投票数为(N / 2 +1),其中N是组中成员总数。 因此,在上面的示例中,我们至少需要3个节点才能具有共识保证。

  如果法定仲裁节点由于任何原因不可用,则群集将不可用,并且无法提交新日志。

  Raft通过解决围绕领导者选举的三个主要子问题,管理分布式日志和算法的安全性功能来解决分布式共识问题。

  领导人选举

  选举筏筏的新领导者是领导者选举的过程。 当我们启动一个新的Raft集群或某个领导者不可用时,将通过集群中所有成员节点之间的选举来选举一个新的领导者。 因此,在给定的实例中,Raft集群的节点可以处于以下任何状态(如图2所示); 追随者,候选人或领导者。

  领导者完全负责管理Raft集群,并处理所有传入的客户端命令。跟随者是被动的,他们仅响应领导者或候选人的请求。 当Raft群组中没有领导者时,任何关注者都可以成为候选人,要求该群组中其他成员投票。

  Raft了解分布式共识

  > Figure 2 — State transitions of Raft members [1]

  在Raft算法中,我们将时间划分为任意间隔,称为术语。 如图3所示,除非领导者节点失败。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多