ToB企服应用市场:ToB评测及商务社交产业平台

标题: 基于Raft算法的分布式KV数据库:六、常见题目及解答 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2024-8-22 10:56
标题: 基于Raft算法的分布式KV数据库:六、常见题目及解答
CPPRaft系列-常见题目及解答


现在项目中还有很多地方可以优化,欢迎各人参加吼吼吼。
地址在:
https://github.com/youngyangyang04/KVstorageBaseRaft-cpp

在前面的系列文章中,我对这个项目提出了很多题目,但是发现没有解答,现在是时间接纳伏笔,对这些题目做一个解答了。
notice:分布式的知识需要严谨的求证,本人学艺不精只能尽可能的保证下面的答复没有题目。如果发现有疏漏的地方欢迎指出,共同进步,不胜感谢。
Raft

Raft算法的基本原理:

答复要点:表明Raft算法的基本工作原理,包括领导者推举、日志复制和安全性保障。
示例答复
Raft算法是一种分布式算法,旨在解决分布式体系中的一致性题目,相对于Paxos算法而言更易于理解和实现。
Raft算法将体系中的全部节点分为三类角色:领导者(leader)、跟随者(follower)和候选人(candidate)。其推举机制确保体系中的一个节点被选为领导者(leader),领导者负责处理客户端的哀求,并将更新复制到其他节点。
Raft算法的基本原理包括以下几个关键步调:
通过以上机制,Raft算法确保了分布式体系中的一致性、可用性和分区容错性。
注意:如果这么答复如果口试官懂一些分布式算法的话,那么后续可能会提问Raft与其他分布式算法的关系。
领导者推举:

如何举行Raft中的领导者推举?

答复要点:这里最好结合前面几个章节的流程图,结合自己理解答复。
示例答复:

Raft中的领导者推举过程如下:
在什么情况下会触发领导者推举?

答复要点:一个节点只要长时间没有收到符合条件的leader发送的心跳就会认为leader掉线,就会发起推举。
示例答复
在Raft算法中,领导者推举会在以下情况下触发:
日志复制:

Raft是如何通过日志复制来保证数据一致性的?

答复要点:重要是两个机制(特点):
1.Leader Append Entries:领导者追加日志条目,即只有leader可以担当外部哀求并将哀求打包成日志,并向follower同步自己的日志,这样保证提交过的日志不会被覆盖掉。
2.commit机制,领导者发现大多数节点都已经成功复制了某个日志条目后,该日志条目被视为已经提交,从而保证了数据的一致性。
示例答复:
Raft算法通过日志复制来确保数据一致性。在Raft中,每个节点都维护一个日志(log)来记录状态机中的操作指令。领导者负责接收客户端的写哀求,将操作指令追加到自己的日志中,并将这些操作指令发送给其他节点,要求它们复制这些日志条目。
以下是Raft通过日志复制来保证数据一致性的基本流程:
安全性保障:

Raft是如何确保安全性的?讨论一致性、可用性和分区容错性之间的权衡。

答复要点 :这里重要是想考察分布式CAP理论的一个关键:CAP中如果发生故障,只能CP和AP二选一,无法满意CAP的三角,而Raft选择的是CP,即满意一致性。
示例答复:
在权衡一致性、可用性和分区容错性时,Raft算法倾向于优先保证一致性和分区容错性。它通过保证大多数节点简直认和限制领导者推举条件来确保一致性,通过推举机制和日志复制来保证分区容错性。同时,Raft也兼顾了体系的可用性,确保在领导者失效后可以或许快速举行新的领导者推举,并继承提供服务。
推举超时:

什么是推举超时?它的作用是什么?

答复要点: follower和candidate都会有推举超时的机制。
在follower时:推举超时的意义是发起推举,酿成candidate;
在candidate时:candidate会推举超时,如果推举成功就会酿成leader;如果推举失败就会酿成candidate(推举超时)大概follower(发现合适的leader)。那么推举超时的作用就很显着了,防止无止境的等候导致全部人都成不了leader。
拓展:想一想为什么推举超时时间要每次随机设置而不设置成一个固定的值???
示例答复:
推举超时的作用包括:
推举超时的时间是如何设置的?

**答复要点:**答复要点在上个题目的拓展里面,各人可以先想想。答案是:一个一定范围内的随机值,其要根据心跳时间,rpc延迟,数据操作延迟综合思量。
范围:一样寻常来说推举超时时间要大于一次完整心跳的日志同步处理时间。
为何随机:推举超时的目标是防止无止境的等候导致全部人都成不了leader,如果超时时间又一样,那么各人又一起推举,又会不停循环,那么一个随机值可以让某些节点早点重新发起推举,防止各人一起推举导致死循环。
示例答复:
推举超时时间的设置通常包括以下思量因素:
日志条目标提交:

Raft中的日志条目是如何提交的?

答复要点: 要半数以上的节点(包括leader)接收了这个日志,那么才华提交(commit),后续才华apply到状态机。
示例答复:
什么条件下才华够提交一个日志条目?

答复要点: 一个很容易疏忽的是必须要本term有新的日志提交才华继承提交日志,这个在前面文章中也提醒过。
示例答复: 略。
拓扑变更:

关于Raft节点变更属于比较进阶的知识,口试中没碰到过,建议各人可以相识相识
此外,这块我掌握的也不是很好,可能有错误的地方,欢迎各人指正。
Raft如那边理集群拓扑的变更?

答复要点:
示例答复:
现实应用:

Raft算法在现实场景中的应用有哪些?

答复要点: 列举一些常见的使用Raft算法作为底层的即可。
示例答复:
Raft与其他分布式的比较:

与Paxos算法相比,Raft有哪些上风和差异之处?

答复要点: Raft相对于Paxos算法来说,更易理解、实现和维护,具有更直观的Leader机制和推举过程。(这个需要各人多相识一下其他分布式算法的计划思想了。)
示例答复:
常见题目与挑战:

Raft算法在分布式体系中有哪些常见的题目和挑战?

答复要点: leader的瓶颈(使用多读来解决),节点故障等等
示例答复:
如那边理网络分区的情况?

答复要点: 这个要结合多种情况分析,比如leader宕机、非leader宕机;少数节点分区、多数节点分区。然后这几种情况还可以相互组合,这个的话就要分类讨论了,口试估计是说不完的。
示例答复:
分情况讨论,略。
容错性:

Raft算法如那边理节点故障?

答复要点:
和网络分区是一样的,可以当作是网络分区的一种特别情况,即一个节点自己是一个分区。
此外再加上故障规复后有哪些数据(日志,投票,term等)是需要长期化的,哪些是不需要的(commitIndex,applyIndex等)。
示例答复:
略。
在集群中的多个节点同时故障时,体系会有什么表现?

**答复要点:**思量故障节点的数目,抓住“半数”这个概念。 其他同上面的“分区题目”和“故障题目”。
示例答复: 略。
RPC

你的RPC如何计划的?

答复要点: 这里最好的答复是答复出现有的rpc框架的一些优秀的计划,因为我的rpc实现只是raft-kv的一个配件,以是照旧 同步壅闭 的,这里推荐各人看看异步rpc如何实现,也欢迎来改进项目中的RPC实现参加开源:项目地址
列出可以思量的优化点:异步;rpc长毗连短毗连的思考;负载均衡;服务管理、服务发现。
示例答复:

负载均衡有没有做?用的什么算法如何思量的?

答复要点: 1.常见的负载均衡算法及其对比;2.第四层和第七层差异层的负载均衡;3.瘦客户端和胖客户端的差异方式的负载均衡。
示例答复:
最开始实现rpc模块的时间实现过负载均衡算法,当然背面用于raft通讯,因为raft通讯是全部leader与全部节点都要建立毗连,以是背面就没有再用负载均衡了,将这个功能关闭了。
其时实现的负载均衡的算法有:
服务管理和发现有没有做?怎么做的?

答复要点: 一样寻常是用第三方组件(比如zookeeper)来做,当然raft-kv自己就可以用来做服务管理和服务发现,以是rpc就没有单独做。
示例答复:

你这个RPC框架的序列化和反序列化中protobuf细节有没有相识

答复要点: 头部变长编码+自界说的压缩算法。
这里就可以牵扯到rpc中的编码方法,现在是头部定长4字节,可以优化成一个标记位+变长编码的方式:参加issue链接
示例答复:
大概相识了一下,重要是其头部的变长编码+Google自己实现的一个高效的压缩算法。
测试

在集群数目变多的时间,Raft性能可能会下降,这方面有没有思考过?

答复要点: 允许从follower读;rpc归并等raft落地的框架的优化。
示例答复:

有没有对性能举行过测试?用的什么工具?怎么测试的?

答复要点: perf火焰图。
示例答复:
这里答复一下火焰图的基本使用就差不多了,如果各人没有使用过的话推荐各人去看篇博文入门相识基本操作和原理(探针),
我这里给出一个初步的效果,如果只有一个客户端:并发几十,大部分的消耗在rpc这边。多个客户端的效果没有测试。

分布式的内容相称多,一方面需要不停增补学习,另一方面需要择重点学习。
影响比较深的一个题目:Raft处理单向网络故障的时间的题目,像这些比较偏的题目建议掌握重要题目之后偶然间再看。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4