分布式基础-分布式共识之Paxos、Raft算法

分布式一致性协议 之 Paxos协议 Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos由 莱斯利·兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公开,最初的描述使用希腊的一个小岛Paxos,描述了Paxos小岛中通过决议的流程,并以此命名这个算法,但是这个描述理解起来比较有挑战性。后来在2001年,莱斯利·兰伯特重新发表了朴实的算法描述版本《Pax 阅读详情

本文主要参考自相关书籍和网络文章,并附上自身的一些理解,如有遗漏或错误,还望海涵并指出。谢谢!

一.分布式共识

之前我们已经了解过分布式系统中会出现的分布式一致性问题:当分布式的节点发生了网络分区时,可用性和强一致性只可选择一者。

在这里插入图片描述

而分布式共识描述的是分布式系统中,如何使所有的分布式节点都达成共识,譬如在节点宕机后,其他的节点如何达成这个节点“已经宕机”的共识?或是要选举出某个节点作为Master,那么其他节点如何达成“该节点作为Master”的共识?这就是分布式共识问题。

在分布式共识问题中,经典的解决方法有Paxos、Raft和ZAB算法。

在此之前,我们需要先了解一下拜占庭将军问题:

https://www.zhihu.com/question/23167269/answer/232108407

11位拜占庭将军去打仗, 他们各自有权力观测敌情并作出判断, 进攻或撤退, 那么怎么让他们只用传令兵达成一致呢?一种很符合直觉的方法就是投票,每位将军作出决定后都将结果"广播"给其余所有将军, 这样所有将军都能获得同样的11份(包括自己)结果, 取多数, 即可得到全军都同意的行为.但如果这11位将军中有间谍呢? 假设有9位忠诚的将军, 5位判断进攻, 4位判断撤退, 还有2个间谍恶意判断撤退, 虽然结果是错误的撤退, 但这种情况完全是允许的. 因为这11位将军依然保持着状态一致性.暂时从战争故事中抽离出来, 分布式数据库最糟糕的问题绝对不是写入或者读取失败, 而是状态不同步, 还感知不到. 这个的后果就是correctness不能保证, 那程序就没有任何意义了.2个间谍怎么破坏状态一致性呢? 他们跟5位判断进攻的将军说, 我们支持进攻, 那么这5位将军统计发现7位支持进攻, 4位支持撤退, 将发动进攻. 又跟4位撤退的将军说, 我们支持撤退, 一统计, 5票进攻, 6票撤退, 立马撤退. 这场战争必输无疑了.避免这种状态不同步的问题, 称之为"广义拜占庭将军问题"。

简单地理解这个问题,就是当叛变者不超过 3分之1时,存在有效的算法,使得忠诚的将军们达到一致的结果。
用数学公式来表达就是,假设节点总数为 N, 叛变将军数为 F, 当 N >= 3F + 1,问题就有解。
Byzantine Fault Tolerant (BFT) 算法就是解决这个问题的。

二.Paxos算法

Paxos算法是分布式宗师Lamport提出的一种基于消息传递的分布式一致性算法,使其获得2013年图灵奖。也是经典的分布式共识算法,不过由于实现复杂并且偏理论性,并且难于理解,所以主要作为理论研究居多。

Paxos角色定义

Paxos算法将分布式系统的节点分为以下四类角色:

  1. Client(客户端):系统外部角色,对Proposer发出请求。
  2. Proposer(提议者):接收Client的请求,并提出提案,提案信息包括提案编号和提议的值([n, v])
  3. Acceptor(接收者):接受提案并对提案投票
  4. Learner(告知者):被告知对提案的投票结果,不参与投票过程
1.Basic Paxos

Basic Paxos是一种基本的Paxos算法变种,实现比较简单。

1.算法步骤
  • 一阶段:Prepare,Proposer提出一个提案,编号为n,该编号大于Proposer之前提出的提案编号则请求Acceptor接受提案
  • 一阶段:Promise,如果n大于该Acceptor之前接受的提案编号则接受,否则拒绝
  • 二阶段:Accept,如果大多数Acceptor同意该提案,则Proposer会发出Accept请求,此请求包含了该提案编号n和提案内容
  • 二阶段:Accepted,如果Acceptor在Accept期间没有接收到任何编号大于n的提案,则接收此提案内容,否则忽略
2.基本流程

现在演示Basic Paxos的基本请求流程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xRRMcY5a-1585668479376)(http://note.youdao.com/yws/res/17884/9AECDAA3A1554EB9955795F53E257D99)]

  1. Client向Proposer发送请求
  2. Proposer进入Prepare阶段,对Acceptor发出提案(编号为1)
  3. Acceptor接收到提案,进入Promise阶段,假设a、b、c三个Acceptor都同意该提案(Promise(1, {Va, Vb, Vc}))
  4. 大多数Acceptor都同意该提案,Proposer向Acceptor发出Accept请求(提案内容为Vn)
  5. 在这个期间没有其他新的提案产生,所以Acceptor接受此提案,进入Accepted阶段,然后告知Learner记录结果
  6. Learner记录下结果后,响应Client
3.部分节点失败

上述的基本流程是最理想的情况下,全部Acceptor都同意提案的情况,接下来演示的是部分节点失败(不同意提案或者是Acceptor节点宕机)时的Basic Paxos流程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xoFe15n-1585668479377)(http://note.youdao.com/yws/res/17899/49CBD11108664700A00FE47FC49C5BBD)]

  1. Client向Proposer发送请求
  2. Proposer进入Prepare阶段,对Acceptor发出提案(编号为1)
  3. Acceptor接收到提案,进入Promise阶段,此时有一个Acceptor不同意或宕机,但是仍然有两个节点同意,满足大多数同意提案的情况(Quoroms Agree)
  4. Proposer向Acceptor发出Accept请求(提案内容为V)
  5. 在此期间没有其他的提案,所有Acceptor同意提案(Accepted),并告知Learner记录结果,响应给Client
4.Proposer失败

现在来看看Basic Paxos中,Proposer失败的场景。由于Proposer也是一个节点,所以有可能出现宕机的问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VkFuwM40-1585668479378)(http://note.youdao.com/yws/res/17918/08BDF8C0EAFC4DCE97CBC96745FE0605)]

  1. Client向Proposer发送请求
  2. Proposer进入Prepare阶段,对Acceptor发出提案(编号为1)
  3. Acceptor接收到提案,进入Promise阶段,假设a、b、c三个Acceptor都同意该提案
  4. Proposer失败
  5. 此时会重启另一个Proposer,来重新发送提案,继续执行Prepare、Promise、Accept和Accepted的过程
5.活锁问题

Basic Paxos在多个Proposer的情况下会出现活锁问题,导致整个系统不能正常工作,出现对多个提案进行竞争Accept的情况。

https://zhuanlan.zhihu.com/p/31780743
在这里插入图片描述

2.Multi Paxos

为了解决Basic Paxos的多个提案下的活锁问题和需要两个阶段的网络来回问题,此时出现了Paxos算法的另一种变种:Multi Paxos

0.Leader

在Multi Paxos中,只有一个Proposer可以对Acceptor提出提案,该proposer被称为Leader。

1.算法步骤

在这里插入图片描述

  1. Leader确认阶段:其中一个Proposer对Acceptor发送一个提案,提案中带有n标志着这是某个Proposer节点(Prepare);Acceptor对这个Proposer进行确认(Promise),然后该Proposer发出Accept请求,确定自身为Leader(Accepted)
  2. 请求阶段:在该Leader的有效期内,对Acceptor发送请求,但是无需再进行Prepare和Promise阶段,Acceptor会同意该Leader的提案,直接进入Accepted阶段,然后Acceptor响应Learner记录该提案响应客户端,并告诉Leader
2.角色优化

对于Multi Paxos算法,可以将Proposer和Acceptor角色给合并为一个角色Servers:

在这里插入图片描述

这样,Client向Servers中选举出来的Leader发送请求,然后Leader向其他Server节点重复Leader确认阶段和请求阶段即可。

3.Multi Paxos的优点
  1. 首次请求进行Proposer的Leader选举后,Client的所以请求都由该Leader发送,不会出现活锁现象
  2. 选举出Leader后,Leader发送的请求只需要一轮网络RPC即可(直接进入Accept和Accepted阶段)

三.Raft算法

由于Paxos算法实在太复杂,并且难于实现,所以产生了Raft算法。Raft算法可以视为Multi Paxos算法的精简版本,易于理解和实现。

关于Raft的动画演示可以参考该网站:

http://thesecretlivesofdata.com/raft/

1.角色定义
  • Client:系统外部客户端
  • Leader:负责接受Client的写请求,并将写请求同步到所有的Follower
  • Follower:同步于Leader的数据
  • Candidate:当一定时间内不存在Leader时,会有相应的Follower成为候选者进行Leader选举
2.核心流程
1.Leader Selection

Raft将Leader选举和Log复制过程分开成两个部分,分别进行。首先会进行Leader选举,选举出系统中的Leader。

1.1、初始化Leader

在系统刚启动时,所有的节点都将被视为Follower,这时需要初始化一个节点作为Leader。

首先,每个节点都拥有两个超时时间,第一个超时时间为选举超时时间(选举超时时间会在150ms到300ms之间随机分配),这个时间是Follower成为Candidate之前所等待的时间,当Follower变成了Candidate,成为Candidate的节点将会向其他节点发送信号,建议自己成为Leader。当该Candidate获取到大多数的投票时,自身变为Leader。

选举超时时间在流逝,每个节点的超市时间都不相同
在这里插入图片描述
C节点的超时时间已到,成为候选人
在这里插入图片描述
C节点向其他节点发送请求,建议投票自己成为Leader
在这里插入图片描述
在这里插入图片描述
在C节点作为Leader期间,C节点会不断地向其他节点发送心跳包,刷新其他节点的选举超时时间
在这里插入图片描述

1.2、重新选举Leader

当C节点宕机后,不会再向其他节点发送心跳包,这时A和B的选举超时时间会不断流逝
在这里插入图片描述
A节点的选举超时时间流逝完,变为候选者,向B节点发送请求,建议投票给自身,A成为Leader
在这里插入图片描述

1.3、双候选人选举

加入现在有4个Follower节点的选举超时时间正在流逝
在这里插入图片描述
此时C、D节点同时成为候选者,然后向其他节点发送建议投票的请求
在这里插入图片描述
C、D此时接收到的响应应该是相同的,也就是得票数相等
在这里插入图片描述
此时C、D会同时刷新150ms~300ms的选举超时时间,重复选举的过程
在这里插入图片描述
此时D先结束了选举超时时间,所以向其他节点发送建议投票请求,D成为了Leader
在这里插入图片描述

2.Log Replication

在这里插入图片描述

节点经过Leader选举过程之后会产生一个Leader,Client的写服务要经过Leader,Leader首先对其他Follower发送心跳包判断是否超过半数的Follower能够同步这次写操作,当半数以上的Follower能够同步到这次写操作,则表示写入成功,进行日志复制;若不能完成,则写入失败。

注意,Leader向其他Follower发送Log同步请求时,实质上也是一个心跳包,这里心跳包的作用一是携带请求,而是刷新Follower的选举超时时间。

1.Log复制过程

Client向Leader B发送Set 5这个写请求
在这里插入图片描述
Leader B向其他Follower发送心跳包,确认是否可以同步
在这里插入图片描述
一旦大多数的Follower可同步,则执行Set操作
在这里插入图片描述
然后Leader B将写入成功的响应发送给客户端,然后其他的Follower会同步这个操作
在这里插入图片描述

2.网络分区发生

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CnsPLWTn-1585668479398)(http://note.youdao.com/yws/res/18114/44FAB679A9E14D45A98B364E17E23AEB)]

注意,Leader选举需要半数以上的Follower同意才行,一般节点数量应该选择为奇数,因为这样才能在网络分区发生时能够正常地进行Leader选举。

假设现在系统发生了网络分区,此时A、B被划分到了一个分区中,C、D、E被划分到了另一个分区中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yYaQYU5e-1585668479399)(http://note.youdao.com/yws/res/18117/57883DCBBB03491A84E2727A14C668B8)]
这时由于C、D、E的选举超时时间流逝,其中C成为候选人,向D、E节点发送投票请求,C成为所在分区的Leader
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3LTBwQF7-1585668479400)(http://note.youdao.com/yws/res/18123/D000DA4AEDFB455AB7064645FB0736A1)]
此时客户端1向Leader B发生Set 3的请求,Leader B会发送心跳包给A,确认其是否可以同步,但是却发现当前只有2个节点同意同步(包括Leader B自身),达不到节点总数的一半以上(不到3个),所以暂时不会进行数据的更新
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAsArfpL-1585668479403)(http://note.youdao.com/yws/res/18129/015D3452E3B14EDD9367778870F112E3)]
此时客户端2向Leader C发送了一个Set 8的请求,Leader C把心跳包发送给D
和E,目前半数以上节点(3个节点)都可同步数据,所以提交日志,C、D、E节点被设置为8
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BMRVKBWJ-1585668479404)(http://note.youdao.com/yws/res/18133/F2FC787B762241F0A9FBAE7B369D1DA5)]
当网络分区消除后,A节点发现自身的Leader年代比C的小(Term),所以把自身设置为Follower,接受C的同步,将数据同步到其他节点的状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89YhwYGs-1585668479404)(http://note.youdao.com/yws/res/18140/9A8DDE42A2974E5AAA8FDB04C2D8E095)]

四.总结及推荐

看完了Basic Paxos、Multi Paxos和Raft算法的基本原理和过程,现在来做一个总结回顾和学习资源推荐哈。

Paxos算法是分布式共识领域一个十分重要的理论算法,它的实现复杂,要求苛刻,并且具备许多变种,譬如Basic Paxos和Multi Paxos。

Paxos算法需要定义的核心角色有:

  1. Proposer(提议者):接收Client的请求,并提出提案,提案信息包括提案编号和提议的值([n, v])
  2. Acceptor(接收者):接受提案并对提案投票
  3. Learner(告知者):被告知对提案的投票结果,不参与投票过程

Basic Paxos算法的实现过程需要两阶段RPC:

  • 一阶段Prepare过程,Proposer将提案提交给Acceptor
  • 一阶段Promise过程,Acceptor对提案进行投票
  • 二阶段Accept过程,当大多数Acceptor对提案进行了同意投票,那么Proposer会对Acceptor发出Accept请求
  • 二阶段Accepted过程,Acceptor接收到Proposer的Accept请求,判断这个过过程中没有其他的提案产生,允许该提案。Acceptor将提案发给Learner进行记录,并且响应给Proposer和客户端

Basic Paxos在多个Proposer提出多个提案的过程中,可能发生活锁。

Multi Paxos的算法相较于Basic Paxos更加简单并且易于实现,是Paxos的一种工程化变种。

Multi Paxos算法需要确认一个Proposer作为Leader,也只有这个Leader能够向Acceptor发送提案。在第一次建立对Leader的信赖后,后续的提案过程中都不需要进行一阶段Prepare、Promise过程,而是直接进行二阶段的Accept和Accepted过程,减少了一轮RPC调用,并且解决了活锁问题。

Raft算法是Multi Paxos算法的精简实现,由于其简单易实现,被广泛用于分布式系统之中,譬如Redis就是使用Raft算法来做哨兵集群的Leader选举的。

Raft算法的核心角色为:

  • Leader:接受Client的写请求并将其同步给其他大部分Follower
  • Follower:同步Leader的数据
  • Candidate:当节点的选举超时时间流逝后,变为候选者,参与Leader选举

Raft算法分为两个核心的过程,分别是Leader选举过程和日志复制过程。

Leader选举过程:

  • 初次选举
  • 宕机选举
  • 双候选者选举

Log复制过程:

  • 大部分Follower可以同步才算写成功
  • 网络分区时的同步,以大部分节点的那个分区Leader为真实Leader

推荐的学习资源

  • 一致性算法(Paxos、Raft、ZAB):https://www.bilibili.com/video/BV1TW411M7Fx
  • 分布式系统以及共识机制:https://www.jianshu.com/p/c49bbf8630df
  • Raft算法在线调试:https://raft.github.io/
  • Raft算法在线演示:http://thesecretlivesofdata.com/raft/
ZooKeep干货|分布式核心原理Paxos算法 P2c:如果一个编号为 n 的提案具有 value v,该提案被提出(issued),那么存在一个多数派,要么他们中所有人都没有接受(accept)编号小于 n 的任何提案,要么他们已经接受(accept)的所有编号小于 n 的提案中编号最大的那个提案具有 value v。此时S3-S5收到Prepare(4.5),S3会回复已经接受的提案(3.1, X),S5将提案值Y替换成X,发送Accept(4.5, X)给S3-S5,对S3来说,编号4.5大于3.1,所以会接受这个提案。注意 P1 是不完备的。 阅读详情

相关推荐

分布式精华笔记!带你深入剖析一致性共识算法还不来看?

Basic Paxos 在Basic Paxos中,使用提案代表一个提议,在提案中除了提案编号,还包含了提议值。使用[n, v]表示一个提案,其中n为提案编号,v为提议值。 整个共识协商是分2个阶段进行的(二阶段提交)。假设客户端1的提案编号为1,客户端2的提案编号为5,节点A、B先收到来自客户端1的准备请求,节点C先收到来自客户端2的准备请求。 prepare阶段 客户端1、2作为提议者,分别向所有接受者发送包含提案编号的准备请求: 对于客户端1的提案,由于之前没有通过任何提案,所以节点A、B以后将不再

澎湖Java架构师的博客 232

科普文:分布式数据一致性协议Paxos

在接收到来自集群中的其他 Follow 服务器的投票信息后,集群中的每个 Follow 服务器都会与自身的投票信息进行对比,如果判断新的投票信息更合适,则采用新的投票信息作为自己的投票信息。在集群中的投票信息还没有达到超过半数原则的情况下,再进行新一轮的投票,最终当整个 ZooKeeper 集群中的 Follow 服务器超过半数投出的结果相同的时候,就会产生新的 Leader 服务器。当该提案通过网络发送到集群中的其他角色服务器后,这些服务器会就该会话在本地的执行情况反馈给发起提案的服务器。

为无为,事无事,味无味。 3854

分布式共识算法全景教程

它不是停止工作,而是给不同的处理器发送不同的数据——给 A 说"高度 3000",给 B 说"高度 5000"。在投票逻辑看来,这台处理器仍然"在线",仍然在"参与",但它的每一票都在制造分裂。:A 是叛徒,给 B 发"进攻"、给 C 发"撤退"。B 的处境和情况一完全一样——收到了"进攻"和"撤退",无法判断谁在说谎。如果 B 在情况一中选择"进攻",那它在情况二中也会选择"进攻",但 C 会选择"撤退"——两人不一致。B 收到了 A 直接发来的"进攻"和 C 转述的"撤退",无法判断谁在说谎。

mickey_zzc的博客 307

分布式一致性算法——Paxos 和 Raft 算法

本文主要围绕Paxos算法和Raft算法进行了讨论。我们首先介绍了分布式一致性算法的概念和必要性,然后分别从算法基本原理、角色和状态、基本流程、选举过程、优缺点等方面详细介绍了Paxos算法和Raft算法。同时,我们也对这两种算法进行了比较和区分,并讨论了如何选择合适的算法以满足不同场景下的需求和限制。为了更加清晰地描述算法的流程,我们也对Paxos算法和Raft算法的基本流程和选举过程进行了图形化展示。本文将对从事分布式系统相关工作的人员有所帮助,有助于更好地理解分布式一致性算法。

Shockang的博客 6682

分布式之系统底层原理(下)

共识(Consensus),很多时候会见到与一致性(Consistency)术语放在一起讨论。严谨地讲,两者的含义并不完全相同。一致性的含义比共识宽泛,在不同场景(基于事务的数据库、分布式系统等)下意义不同。具体到分布式系统场景下,一致性指的是多个副本对外呈现的状态。如前面提到的顺序一致性、线性一致性,描述了多节点对数据状态的共同维护能力。而共识,则特指在分布式系统中多个节点之间对某个事情(例如多个事务请求,先执行谁?)达成一致意见的过程。因此,达成某种共识并不意味着就保障了一致性。实践中,要保证系统满足不

Moonxiyue的博客 332

分布式共识算法——Paxos算法(图解)

准备阶段:Proposer负责接收 client 请求并产生提案,必须由多数派 Acceptor 批准通过提案接受阶段:提案通过后,再将要执行的修改操作广播给 Acceptor,这次仍然多数派通过,此修改才能生效,可以返回响应给客户端。

流楚丶格念的博客 7415

浅谈分布式共识算法

共识算法:在分布式系统中,如何让集群的每个成员都认同某个值(提案指令),“一致”是要求每个成员的数据完全相同;而“共识”并不要求数据相同,只要求从任意成员上获取的值是相同的即可。Paxos是一个具有高度容错性的共识算法,它的容错性来源于只需要多数派的正常响应。达成有效共识的关键在于,提案指令直到第二阶段才会被真正提出。Paxos分为两个阶段,即Prepare阶段和Accept阶段,如果在两阶段都获得多数派的支持,则视为提案通过。

持续Java学习中 1933

分布式共识 Paxos&Raft&Zab

很多人喜欢把 Paxos 说成是一致性协议,但是一致性这个词其实会给大家误导,会把这个一致性和 ACID 的一致性(Consistency)联想在一起,Paxos 的“一致性”实际上是 consensus,中文翻译成“共识”可能会更加准确一点,这个“共识”更强调的是多副本状态的一致性。 本篇面试内容划重点:Paxos、Raft 的主要内容。 Paxos 协议 Paxos 是最基础的分布式共识算法,...

qq_39712666的博客 305

paxos算法_学习分布式共识算法

如果你从事服务端开发,在互联网规模越来越大的今天,你或多或少会接触一些“分布式”相关的东西,而共识算法作为分布式系统的基石,却不是那么容易理解和实现的。paxos 论文晦涩难懂,raft 在具体实现上也有很多细节值得考究。本文收集了一些关于分布式共识算法的资料,中英文都有,愿你 from zero to hero。“一致性”这个词已经越来越被滥用了,你经常可以在各种博客看到把 paxos 写做是一...

weixin_39554775的博客 294

11、区块链共识机制:原理与关键算法解析

本文深入解析了区块链中的共识机制,涵盖分布式一致性基础理论,包括SMR模型、FLP定理及同步/异步/部分同步网络假设。详细介绍了Paxos和Raft等经典共识算法的运行原理与流程,并分析了联盟链中主流的基于投票、基于证明以及结合两者优势的混合共识机制。文章还从性能、安全性和可扩展性三个维度对不同共识机制进行评估,提供了根据应用场景选择合适共识机制的决策路径,旨在帮助读者全面理解并合理应用区块链共识技术。

sugar的博客 74

深入理解与实践:分布式算法设计与分析

分布式系统是由多个独立的计算节点通过网络互联,共同协作完成任务的系统。它们可以跨越不同的地理位置,通过特定的通信协议进行数据交换。其核心组成通常包括服务器、网络设备、存储系统等,通过分布式架构实现高性能、可扩展性和可靠性。一致性问题在分布式系统中指的是系统中各个节点或进程在没有全局时钟同步的情况下,如何保证数据的一致性。这是分布式系统设计中的核心问题之一,因为一旦系统的各个组件之间的一致性得不到保证,系统就可能会产生错误的数据和不一致的状态,从而导致不可预测的行为。

weixin_35019679的博客 445

一文讲透分布式共识:Paxos、VSR、ZAB和Raft

本文深入探讨了Paxos、Viewstamped Replication(VSR)、ZAB和Raft四种共识算法的核心差异。虽然这些算法都基于多数派交集原则,但在工程实现上存在显著区别:Paxos追求数学完备性但实现复杂;VSR开创主备模式;ZAB依赖FIFO信道简化设计;Raft通过强约束提升可理解性。关键差异体现在日志连续性、主节点选举约束和数据流向上:这些设计取舍反映了算法在灵活性与工程可靠性之间的平衡,Raft通过限制自由度换取更易验证的正确性。

lifallen的博客 957

基于人脸识别的智能门禁系统设计

在当前的技术背景下,本文精心打造了一款前沿的视频识别门禁控制系统。在进行调试的时候使用的软件是Keil,编写完代码,生成文件后用下载器下载到单片机上,就能够进行程序的调试了,本次设计实现了预先设定的目标,达到了预期的效果。本次设计的人脸识别的门禁控制系统其硬件部分是以STM32F103C8T6为核心的单片机,采用0V2640摄像头对人员的人脸识别,采用矩阵按键对系统的操作以及密码的输入,使用蜂鸣器来作为报警模块,开门装置是电子锁控制,显示设备采用OLED液晶显示,无线模块在一番思索后选择了蓝牙模块传输。

2401_86147581的博客 1299

共识算法基础

Raft 算法和兰伯特的 Multi-Paxos 不同之处,主要有 2 点。首先,在 Raft 中,不是所有节点都能当选领导者,只有日志较完整的节点(也就是日志完整度不比半数节点低的节点),才能当选领导者;其次,在 Raft 中,日志必须是连续的。Raft 算法通过任期、领导者心跳消息、随机选举超时时间、先来先服务的投票原则、大多数选票原则等,保证了一个任期只有一位领导,也极大地减少了选举失败的情况。

Gabriel的博客 857

KNX实战—ETS5_智能开关从零到一的配置全流程

本文详细介绍了使用ETS5软件配置KNX智能开关的完整流程。从创建项目、构建建筑结构,到导入产品数据库、添加并配置开关模块与智能面板,再到设置延时开关、闪烁报警等进阶功能,并深入解析了群组地址的配置与链接方法。最后指导完成项目校验与程序下载,帮助用户实现从零到一的智能灯光基础控制功能配置。

joy55的博客 543

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 726

分布式共识的理论基石:Paxos 算法深度解析

✅Paxos是分布式共识算法的理论基石,由 Lamport 提出。✅三大角色✅多数派(Majority):保证一致性的数学基石(N/2 + 1)。✅两阶段协议:Prepare(准备)和 Accept(接受)。✅安全核心:必须选择已接受提案中编号最大的那个值。✅工程演化:Multi-Paxos 引入 Leader,跳过 Prepare 阶段,提升性能。

qq_51553749的博客 145

告别软件轮询!用STM32G474的COMP比较器实现纳秒级硬件过压保护(CubeMX配置详解)

本文详细介绍了如何利用STM32G474的COMP比较器实现纳秒级硬件过压保护,通过CubeMX配置详解,展示了硬件比较器相比传统软件轮询方案在响应时间、CPU占用和可靠性等方面的显著优势。文章还提供了实战配置流程和优化技巧,帮助工程师快速构建高效的硬件保护系统。

weixin_28683689的博客 351

Paxos、Raft不是一致性算法/协议?

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章作为互联网中的一员,我们时常沉浸在“分布式”的氛围当中——高可用、高可靠、高性能等等词汇随处可见,CAP、BASE、2...

方志朋的博客 195

保姆级教程:用Python+OpenCV搞定Orbbec Gemini深度与彩色流对齐(附完整代码)

本文提供了一份详细的Orbbec Gemini深度与彩色流对齐教程,涵盖从环境配置到完整代码实现的每一步。通过解析深度流对齐原理,对比不同对齐模式,并提供工业级应用中的问题排查方法,帮助开发者快速掌握Orbbec Gemini相机的使用技巧。文章还包含进阶应用如点云生成与三维重建的实战代码。

weixin_29090917的博客 470

【YOLOv8系列】YOLOv8的webUI界面设计;通过Streamlit实现YOLOv8的可视化交互界面设计

但是我为了避免重复性的工作,且为了避免重复安装之前(安装pytorch和yolov8时)已经安装好的库,因此写了一个python脚本进行安装;需要提前在有网络连接的电脑上下载所有必要的依赖项,然后将这些文件传输到离线的机器上进行安装。脚本将自动跳过已安装的包,并安装其余的 .whl 文件。在离线的机器上,切换到包含下载好的文件的目录。证明我们的streamlit安装成功了。证明你的streamlit安装成功了。第一步:在有网络连接的电脑上下载。第二步:将下载的文件传输到离线机器。文件)传输到离线的机器上。

AnChenliang_1002的博客 1567

搞了这么久分布式,深入剖析一致性共识算法,你了解多少?

ZAB协议在Multi-Paxos达成共识的基础上实现了操作的顺序性。1. 在Raft中,不是所有节点都能当选领导者,只有日志最完整的节点,才能当选领导者;2. 日志必须是连续的;1. Raft采用的是“先到先得”的自定义投票算法。Raft的领导者选举,需要通讯的消息数更少,选举也更快。2. 对于日志复制,Raft和ZAB相同,都是以领导者的日志为准来实现日志一致,而且日志必须是连续的,也必须按照顺序提交。

lt_xiaodou的博客 264

YOLOv11改进策略【模型轻量化】| 使用 MoblieOne 模块,引入结构重参数化,提高模型检测效率

本文记录的是基于MobileOne的YOLOv11骨干网络改进方法研究。MobileOne的基础模块通过重参数化,。在将其替换YOLOv11的骨干网络后,实现模型轻量化。

Limiiiing的博客 1427

分布式算法基础

分布式算法基础 前言 在研究区块链共识算法的时候,发现很多基础就是分布式算法。其中最经典的两个分布式算法——Paxos和Raft。Paxos号称比较难理解,Raft相对Paxos更加中心化(strong-leadership),同时更容易理解。在网上有实现Paxos和Raft的算法代码,拿来跑完一遍之后对一些原理还是半懂不懂的,于是对着论文一点点把架构看懂。 架构 分布式算法的架构,可以理解为分布...

shenpanzhimao的博客 1476

拉曼光谱入门:7.拉曼光谱仪光学系统结构详解

本文系统拆解了拉曼光谱仪从激光器输出经聚焦照明、二向色镜/陷波滤光片组滤除瑞丽散射、衍射光栅色散至CCD探测的完整光路,阐述了各光学模块在微弱非弹性散射信号提取、杂散光抑制及高分辨光谱成像中的工程原理与技术参数要求。

qq_53529450的博客 226

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Paxos、Raft、Zab共识算法对比:选型、调优与排障实践

分布式一致性是分布式系统实现高可用与数据可靠的基础问题,核心在于通过多数派投票和持久化,让一组节点对操作序列达成不可推翻的一致结果。复制状态机将共识产生的全序日志回放到各副本,使所有节点得到相同状态,从而支撑配置管理、分布式锁、元数据存储等场景。Paxos、Raft、Zab是绕不开的经典共识协议,但在领导者选举、日志复制、成员变更、快照和线性一致读上各有工程取舍。围绕选型判断、关键参数调优和线上排障经验展开梳理,有助于建立从协议原理到工程落地的完整直觉。

weixin_30647423的博客 328

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 操作系统-深入理解IO模型与Reactor、Proactor模式
下一篇: 分布式基础-常见分布式事务解决方案
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值