tinyKv中appendEntries和heartbeat的区别

大佬们,我想问一下,tinyKv中appendEntries和heartbeat的区别。
project2文档里说,“Note that, unlike Raft paper, it divides Heartbeat and AppendEntries into different messages to make the logic more clear.”
我有点疑惑具体实现里,Heartbeat消息和一个entries为空的AppendEntries消息(也就是刚选上leader后广播的消息),除了消息类型之外,其他变量还有什么区别。如果它们俩都要维护日志的话,那么logindex和logterm都是需要的。
我的一个猜测是,或许它们的结构体除了消息类型Msgtype外没什么不同,仅仅是对应的handle function不同?

这个你具体可以看doc.go,它这里将heartbeat和appendEntries 分开了,那么heartbeat其实功能很简单了,它只要定期的发送心跳信息,确认存活,确认leader就好了。而appendEntries则是起同步日志的作用

heartbeat 只会维持 raft Leader 和 Follower 的状态,Follower 收到这类消息之后只会确认状态。
而 AppendEntry 消息,Leader 选举完成之后,需要发送 Term 等信息,进行新的 Leader 和 Follower 之间日志的同步。

嗷嗷 那是我搞错了
也就是说heartbeat并不需要进行同步,只需要应答就行了
感谢!!

heartbeat不需要index,只需要term即可。因为它不做日志同步,且经常发送,这个消息的长度尽可能精简。

tinyKV中,HB完全用来保证election timeout不超时。leader在tick的驱使下,达到了hb timeout,只会发送一个HB给所有follower。
原本的论文中,在每次HB,如果有需要同步的entry,会将log的信息附带在HB中,但是tinykv中,AppendEntries不再和HB由同一个逻辑发送。而是,一旦leader的entries发生变化,无论是noop,还是propose, 都会立即向各个follower发送append。也就是会尽快同步entries,不再是用一个间隔来发送。

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。