首页 > 编程语言 >Pasos和RAFT算法

Pasos和RAFT算法

时间:2023-06-14 20:12:01浏览次数:32  
标签:提议者 算法 投票 RAFT Pasos 提议 节点 分布式

Paxos 提出时间1990年,RAFT提出时间2013年。RAFT 是Paxos的简化版,或者说是提高投票效率,但是降低了投票公平性的妥协方案。

RAFT

分布式raft(Replicated And Fault Tolerant)选举算法原理

  • 分成三个角色,领导者,跟随者,和候选者。

  • 在没有领导者的时候和领导者联系不上的时候。跟随者通过自身随机超时发起选举。

  • 选举的过程,把自己变成候选人,把自身的任期+1,然后投自己一票,然后请求其他节点给把当前任期的那票投给自己一票。

  • 每个节点在一轮任期中只有一票。给了先来要票的候选者,后来的就得不到了。

  • 跟随者收到投票邀请以后,如果自己的任期比当前投票任期小,更新自己的任期,否则就拒绝。

  • 随机超时 时间是为了减少大家一起扎堆成为候选人发起选举的情况。

  • 候选者得到大多数的票以后变成领导者。并且通知大家自己成为领导。

  • 如果这时候前领导回来了,收到新领带任期比自己大的心跳,就会默默地把自己降级成跟随者。

  • 如果当前领导心因为网络不通,丢失了其他节点的心跳,那么其他节点在随机时间以后开始重复走选举的流程。

  • 选举平票会重新选举。

  • 如果领导者能一直保持心跳,那么它会终身任命。

  • 在领导不失联的情况下,别的候选者不能更成为领导,如果让领导者失联,并且立即发起选举,很容易成为新的领导者。

Paxos

  • 分成三个角色提议者(Proposer),接受者(Acceptor),告知者(Learner)
  • 提议者发起提议的两个阶段请求,接受者处理提议的两个阶段的请求。告知者只是同步数据的角色,不参与投票。
  • 提议分成两个阶段,1是准备阶段,2是接收阶段。只有两个阶段都通过才能写入数据。
  • 提议内容,提议包含提议编号和提议内容。
    • 提议编号是全局递增的一个编号。
    • 提议内容是修改的内容。
  • 提议者发起准备提议,并且只有提议号
  • 接受者如果重来没有响应过提议,那么直接响应 [无提议],表示可能接受。
  • 接受者如果直接接受过提议.
    • 如果之间接受过的最大提议编号小于当前提议编号,那么响应之前接受过得最大提议编号和提议值。表示可能接受。
    • 如果之前接受过的最大提议编号大于当前提议编号,那么久不响应。表示拒绝
  • 提议者如果收到超过一半接受者的响应那么就发起接受阶段的请求。否者就需要丢弃提议或者再次发起新的提议。更换更大的提议号可能导致活着锁问题。可以阶梯的提高等待时间来避免这个问题。
  • 提议者发起接受提议,提议号+提议值
  • 如果接受者依旧按照大于等于当前提议号的就响应,小于就不响应,如果该提议在前面阶段被别的提议覆盖那么就不会通过。通过的一定是没有被覆盖的。不会有重复修改的。
  • paxos存在的问题在于如果提议者比较多(多余2个),那么可能需要很多次投票才能满足过半通过这个条件。另外一个问题就是投票过程有两轮,比较慢慢,如果有一个主来协调,那么只需要一轮就能得到投票的结果。

RAFT 和 Paxos区别

RAFT 是一个选主算法,先选主,然后听主的得到主以后每次投票只需要一轮。Paxos是一个投票算法,没有主,每次投票至少需要两轮,但是避免了恶意抢主带来的问题。

分布式一致性算法和分布式事务一致性区别

分布式一致性算法Paxos,RAFT和分布式架构中的分布式事务的数据一致性有完全不同

  • 分布式一致性算法:解决分布式系统中谁是主,谁的数据应该是有效数据。通常描述的对等节点之间的关系。比如A节点走到接受了100个请求,但是B节点只接受到了99 个请求,然后他们网络分区了。
  • 分布式事务一致性:描述的是分布式系统中,因事务在没有原子性的情况下中断,而带来的数据不一致。通常描述的是关联节点的一致性被被破坏。比如游戏卖出装备,就应该增加对应的金币。

标签:提议者,算法,投票,RAFT,Pasos,提议,节点,分布式
From: https://www.cnblogs.com/cxygg/p/17481250.html

相关文章

  • 图像拼接算法技术报告
    图像拼接算法技术报告代码介绍图像拼接是将多个图像按照一定的顺序和几何变换方法组合在一起,形成一个更大、更完整的图像的过程。通过图像拼接,可以将多个部分图像合并为一个整体,以展示更广阔的视野或提供更全面的信息。我们先感性地看一组实验结果(静态场景的图像拼接):左图......
  • go语言编写算法
    1、冒泡排序//冒泡排序a:=[]uint8{9,20,10,23,7,22,88,102}fori:=0;i<len(a);i++{fork:=i+1;k<(len(a)-i);k++{ifa[i]>a[k]{a[i],a[k]=a[k],a[i]}}......
  • 简单易学的机器学习算法——K-Means算法
    一、聚类算法的简介  聚类算法是一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。聚类算法与分类算法最大的区别是:聚类算法是无监督的学习算法,而分类算法属于监督的学习算法。  在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似......
  • 推荐算法——基于矩阵分解的推荐算法
    一、推荐算法概述对于推荐系统(RecommendSystem,RS),从广义上的理解为:为用户(User)推荐相关的商品(Items)。常用的推荐算法主要有:基于内容的推荐(Content-BasedRecommendation)协同过滤的推荐(CollaborativeFilteringRecommendation)基于关联规则的推荐(AssociationRule-Based......
  • 推荐系统中的常用算法——基于Graph Embedding的GES和EGES
    1.概述相比较于基于CollaborativeFilter算法,基于基础GraphEmbedding模型可以根据用户的行为序列学习出item的embedding,利用item对应的Embedding可以方便计算item与item之间的相似度,并在实践中被证明是卓有成效的方法,在基于基础GraphEmbedding模型,主要包括item2vec,node2vec,deepw......
  • 文本分类fastText算法
    1.概述在深度学习遍地开花的今天,浅层的网络结构甚至是传统的机器学习算法被关注得越来越少,但是在实际的工作中,这一类算法依然得到广泛的应用,或者直接作为解决方案,或者作为该问题的baseline,fastText就是这样的一个文本分类工具。fastText是2016年由facebook开源的用于文本分类的工......
  • 机器学习算法实现解析——libFM之libFM的训练过程概述
    本节主要介绍的是libFM源码分析的第四部分——libFM的训练。FM模型的训练是FM模型的核心的部分。4.1、libFM中训练过程的实现在FM模型的训练过程中,libFM源码中共提供了四种训练的方法,分别为:StochasticGradientDescent(SGD),AdaptiveSGD(ASGD),AlternatingLeastSquares(ALS)和MarkovCh......
  • 挑战数据结构和算法面试题——二叉搜索树的后序遍历
    分析:根据二叉查找树的定义,二叉查找树或者是一棵空二叉树,或者是具有一下特性的二叉树:若它的左子树不为空,则左子树上的所有结点的值均小于根节点的值;若它的右子树不为空,则右子树上的所有结点的值均小于根节点的值;它的左右子树又分别是二叉查找树。结合二叉树的后序遍历,则初始序列的最......
  • 【数据结构和算法面试题】左旋转字符串
    问题分析:本题是常见的旋转字符串的问题,解决的方法是两步旋转的方法:方法:voiddo_reverse(char*p_start,char*p_end){ if(NULL==p_start||NULL==p_end||p_start>p_end)return; chartmp; while(p_start<p_end){ tmp=*p_start; *p_start=*p_end; *p_end......
  • 代码随想录算法训练营第七天| 344.反转字符串 、 541. 反转字符串II、 剑指Offer 05.
     344.反转字符串代码:1voidreverseString(vector<char>&s){23inti=0;4intj=s.size()-1;5while(i<j)6{7charmid=s[i];8s[i]=s[j];9s[j]=mid;1011i++;12......