Closed Lxxx11 closed 4 months ago
Message that will be displayed on users' first issue
1初始化为什么要上锁 保护的是什么变 指明一下是哪个具体函数 2竞选的时候follower发现自己的term比candidate小,然后更新自己的term就不投票了吗?还是一会再投? 可以查看一下投票相关的函数,应该是更新自己的term并投出自己的票。 3.选举的时候为什么也要加锁 保护的是什么变量 多个函数都可能涉及log、term、身份的修改,而且是并发的,自然需要并发保护(加锁)。 3.持久化里面为什么要将快照持久化 将快照持久化有什么用 快照本质上是压缩了的log,log要持久化,快照自然也要持久化。 4.持久化为什么要先转化成字符串类型再进行序列化,为什么不直接序列化 你可以尝试给出一版改进。 5.日志同步的时候为什么要考虑到快照,为什么不直接讨论prevlogindex() 和 getLastLogIndex()的三种情况 可以参考问题3的回答。 6.为什么不讨论args->prevlogindex() < getLastLogIndex()这种情况 在什么地方没有讨论? 我盲猜一下,args->prevlogindex() < getLastLogIndex()的时候一般是外部日志更旧,那么就没必要更新自身的日志了。 @Lxxx11
1、是Raft::init这块 就是感觉raft刚刚初始化,还没有创建成功 会涉及到并发情况的影响吗 6、日志同步的时候,领导者给跟随者发送自己的日志,发现跟随者的日志比自己的新,就是这种情况,跟随者是直接忽略吗 7、muduo网络库和线程池在本项目中具体是怎么使用的 8、项目是怎么测试运行的,怎么实现raft集群,是创建多个raft类吗,这块没太看懂 感谢作者能够回复
9、日志一定是被应用完之后才能被快照吗 ,跟随者接收领导者快照那里,是不是发现自己当前的日志比领导者的快照大,就把自己多的部分清除,和领导者的快照保持一致吗,是什么情况导致跟随者的日志比领导者的快照都大。 10、快照是由状态机生成的吗,跟随者接收领导者快照那里,最后的applymsg是要干什么,应用到状态机吗 ApplyMsg msg; msg.SnapshotValid = true; msg.Snapshot = args->data(); msg.SnapshotTerm = args->lastsnapshotincludeterm(); msg.SnapshotIndex = args->lastsnapshotincludeindex();
applyChan->Push(msg);
1、是Raft::init这块 就是感觉raft刚刚初始化,还没有创建成功 会涉及到并发情况的影响吗 6、日志同步的时候,领导者给跟随者发送自己的日志,发现跟随者的日志比自己的新,就是这种情况,跟随者是直接忽略吗 7、muduo网络库和线程池在本项目中具体是怎么使用的 8、项目是怎么测试运行的,怎么实现raft集群,是创建多个raft类吗,这块没太看懂 感谢作者能够回复
1.我是习惯了可能并发就加锁了,当时写的时候主要侧重逻辑实现。此外,如果么有并发,由于有快速用户锁的原因,不太会影响性能。 6.这样的情况下,跟随者会修改rpc的返回值,rpc返回后,leader就知道自己落后了,就会退回成follower。 7.muduo负责rpc,线程池可以看:https://www.cnblogs.com/swx123/p/18037780 这篇文章 8.启动命令见README文件,大概就是启动多个raft类。这块写的同样粗糙,只保证了可以运行。测试问题见:https://github.com/youngyangyang04/KVstorageBaseRaft-cpp/issues/54 9.应该是的,是的,网络分区的时候有可能 10.是的。applymsg可以见service层拿到applyChan干了什么,包括但不限于应用到状态机。
基于protobuf和自定义协议实现RPC通信框架MprRpc通信框架完成各节点之间的远程调用和数据传递功能,设计rpc这块感觉好难看懂,面试的话如果问起如何实现的自定义实现rpc框架该怎么回答,可以大致说一下吗?还有就是多个raft节点之间如何进行通信那块也有点没看懂,也可以大致说一下吗,万分感谢
基于protobuf和自定义协议实现RPC通信框架MprRpc通信框架完成各节点之间的远程调用和数据传递功能,设计rpc这块感觉好难看懂,面试的话如果问起如何实现的自定义实现rpc框架该怎么回答,可以大致说一下吗?还有就是多个raft节点之间如何进行通信那块也有点没看懂,也可以大致说一下吗,万分感谢
这块的话就建议看一下c++ rpc的内容了哈,大家设计的都差不多,一两句说不清楚,而且我这个是同步的还不是异步的,异步的更加复杂。 关于面试的话多搜搜面试题才是王道。 @Lxxx11
初始化为什么要上锁 保护的是什么变
竞选的时候follower发现自己的term比candidate小,然后更新自己的term就不投票了吗?还是一会再投?
选举的时候为什么也要加锁 保护的是什么变量
持久化里面为什么要将快照持久化 将快照持久化有什么用
持久化为什么要先转化成字符串类型再进行序列化,为什么不直接序列化
日志同步的时候为什么要考虑到快照,为什么不直接讨论prevlogindex() 和 getLastLogIndex()的三种情况
为什么不讨论args->prevlogindex() < getLastLogIndex()这种情况