图解 Raft 共识算法:如何复制日志?

发表于 2年以前  | 总阅读数:413 次

上次讲到 Raft 领导者选举:「[图解 Raft 共识算法:如何选举领导者?] 」,接着这个话题继续跟大家聊下关于 Raft 日志复制的一些细节。

Raft 日志格式

在 Raft 算法中,需要实现分布式一致性的数据被称作日志,我们 Java 后端绝大部分人谈到日志,一般会联想到项目通过 log4j 等日志框架输出的信息,而 Raft 算法中的数据提交记录,他们会按照时间顺序进行追加,Raft 也是严格按照时间顺序并已一定的格式写入日志文件中:

如上图所示,Raft 的日志以日志项(LogEntry)的形式来组织,每个日志项包含一条命令、任期信息、日志项在日志中的位置信息(索引值 LogIndex)。

  • 指令:由客户端请求发送的执行指令,有点绕口,我觉得理解成客户端需要存储的日志数据即可。
  • 索引值:日志项在日志中的位置,需要注意索引值是一个连续并且单调递增的整数。
  • 任期编号:创建这条日志项的领导者的任期编号。

日志复制过程

Raft 的复制过程大致如下:

领导者接收到客户端发来的请求,创建一个新的日志项,并将其追加到本地日志中,接着领导者通过追加条目 RPC 请求,将新的日志项复制到跟随者的本地日志中,当领导者收到大多数跟随者的成功响应之后,则将这条日志项应用到状态机中,可以理解成该条日志写成功了,最后领导者返回日志写成功的消息响应客户端,流程如下图所示:

可以看出,Raft 的复制过程中,领导者接收到大多数跟随者成功响应,并且将日志项应用到状态机之后,不需要将结果响应给跟随者,而是直接将成功消息响应给客户端,这是一种优化方式,同时 Raft 会在下一次 RPC 追加日志请求中附加上本次的日志项信息。

以上仅仅只是一种没有发生任何问题的复制过程,在这过程中难免会发生节点宕机等问题,在这种情况下,Raft 是如何处理的呢?

如何保证日志的一致性?

上面讲到,在正常情况下,领导者的日志追加 RPC 请求响应都成功的情况下,领导人和跟随者的日志保持一致性。然而在领导者突然宕机的情况下有可能会造成领导者与跟随者日志不一致的情况,这种情况会随着后续领导者一些列宕机的情况下加剧问题的严重:

注:例子来源于 Raft 论文。

如上所示,当一个领导者成功当选时,跟随者有可能是 a-f 的情况:

  1. a-b 表示跟随者的日志项落后于当前领导者;
  2. c-d 表示跟随者有些日志项没有被提交;
  3. e-f 情况稍微有点复杂,以上两种情况它们都存在。

下面我来还原上面图所表示的情况是怎么发生的:

假设一开始 e 为领导者,在任期 2 时,f 被推选为领导者,写入了若干日志项之后,在追加 RPC 请求中崩溃了,重启后又被选举为领导者(任期号 3),又在写入了若干日志项之后奔溃了;e 此时又重新选举为领导者(任期号为 4),成功复制了若干日志项,同时还有一部分没有成功追加到大多数跟随者又崩溃了,同时跟随者 b 复制了一部分日志项之后崩溃了;假设 a 在任期 5 时被选举为领导者,c 在任期 6 时被选举为领导者,还未全部将本地日志复制到其他跟随者之前又崩溃了,在任期 7 时 d 被选择为领导者,写入了若干日志项之后,在追加 RPC 请求中崩溃了,最后形成了上图的情况。

面对以上的情况,Raft 是如何解决日志的一致性呢?

在 Raft 的日志机制中,为了简化日志一致性的行为,有以下两点非常重要的特性:

  1. 如果在不同的日志中的两个条目拥有相同的索引和任期号,那么他们存储了相同的指令。
  2. 如果在不同的日志中的两个条目拥有相同的索引和任期号,那么他们之前的所有日志条目也全部相同。

第一个特性是因为 Raft 日志项在日志中不会改变,因此只要日志项只要是索引值和任期号相同,就可以认为他们是存储了相同的指令数据信息。

第二个特性是因为领导者会通过强制覆盖的方式让跟随者复制自己的日志来解决日志不一致的问题,领导者在追加 RPC 请求过程中会附带需要复制的日志以及前一个日志项相关信息,如果跟随者匹配不到包含相同索引位置和任期号的日志项,那么他就会拒绝接收新的日志条目,接着领导者会继续递减要复制的日志项索引值,直至找到相同索引和任期号的日志项,最后就直接覆盖跟随者之后的日志项。可认为两个条目拥有相同的索引和任期号,那么他们之前的所有日志条目也全部相同。

因此,Raft 的日志追加大致可分为两个步骤:

  1. 领导者找到跟随者与自己相同的最大日志项,这意味着跟随者之前的日志都与领导者的日志相同;
  2. 领导者强制覆盖之后不一致的日志,实现日志的一致性。

下面我用一个例子充分表达 Raft 在日志复制过程中是如何进行日志强制覆盖的。

假设有一个领导者和一个跟随者,他们的日志项复制情况如下:

可以看出,跟随者在任期号 3 时是领导者,在追加日志过程中崩溃了,重启之后成为跟随者,随后新的领导者向其追加日志,此时他的任期号为 3 最后的一个日志项将被覆盖。

先来看下 Raft 追加条目 RPC 的请求参数:

参数 描述
term 领导者的任期
leaderId 领导者ID 因此跟随者可以对客户端进行重定向(译者注:跟随者根据领导者id把客户端的请求重定向到领导者,比如有时客户端把请求发给了跟随者而不是领导者)
prevLogIndex 紧邻新日志条目之前的那个日志条目的索引
prevLogTerm 紧邻新日志条目之前的那个日志条目的任期
entries[] 需要被保存的日志条目(被当做心跳使用是 则日志条目内容为空;为了提高效率可能一次性发送多个)
leaderCommit 领导者的已知已提交的最高的日志条目的索引

领导者追加并覆盖跟随者过程如下:

  1. 领导者通过日志追加 RPC 请求,将当前最新的要追加到跟随者的日志项以及前一个它的 prevLogIndex=7、prevLogTerm=3 等信息发送跟跟随者;
  2. 跟随者判断当前最新的日志的任期号与 prevLogTerm 不一致,拒绝追加;
  3. 领导者继续递减需要复制的日志项的索引值,此时 prevLogIndex=6、prevLogTerm=3;
  4. 跟随者找到了 LogIndex=6、LogTerm=3 的日志项,跟随者接受追加请求;
  5. 领导者接着会将跟随者 LogIndex=6、LogTerm=3 的日志项之后的日志项进行追加并覆盖。

最后,看到这里的读者,请安排下一键三连(点赞、在看、转发),这次一定好吧,原创不易,你的支持是我最大的动力!

本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/bHAIk6A3-rVL9rDJNGXmEQ

 相关推荐

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

发布于:1年以前  |  808次阅读  |  详细内容 »

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

发布于:1年以前  |  770次阅读  |  详细内容 »

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

发布于:1年以前  |  756次阅读  |  详细内容 »

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

发布于:1年以前  |  648次阅读  |  详细内容 »

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

发布于:1年以前  |  589次阅读  |  详细内容 »

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

发布于:1年以前  |  449次阅读  |  详细内容 »

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

发布于:1年以前  |  446次阅读  |  详细内容 »

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

发布于:1年以前  |  445次阅读  |  详细内容 »

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

发布于:1年以前  |  444次阅读  |  详细内容 »

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

发布于:1年以前  |  442次阅读  |  详细内容 »

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

发布于:1年以前  |  441次阅读  |  详细内容 »

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

发布于:1年以前  |  437次阅读  |  详细内容 »

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

发布于:1年以前  |  430次阅读  |  详细内容 »

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

发布于:1年以前  |  428次阅读  |  详细内容 »

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

发布于:1年以前  |  420次阅读  |  详细内容 »

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

发布于:1年以前  |  411次阅读  |  详细内容 »

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

发布于:1年以前  |  406次阅读  |  详细内容 »

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

发布于:1年以前  |  398次阅读  |  详细内容 »
 相关文章
Android插件化方案 5年以前  |  237228次阅读
vscode超好用的代码书签插件Bookmarks 2年以前  |  8063次阅读
 目录