分布式系统:Raft(实验作业2A)

本文详细介绍了6.824 Raft Lab2A中Make()函数的职责,包括初始化、启动背景go程处理选举和心跳超时。强调了程序结构设计,指出无需使用通道,并解释了发送者和接收者的角色。还讨论了何时使用Lock和Unlock避免死锁,以及如何实现超时检测。最后,指出了在处理RPC回复时检查term变化的重要性,以避免处理过时请求。
摘要由CSDN通过智能技术生成

6.824 Raft Lab2A

Make()函数到底要做什么?

  • 初始化rf。只要照着论文的Figure2左上角State那些赋值就行。
  • 启动一些背景go程(background goroutines)。
  • 这个实验中只需要2个背景go程:1个处理选举超时,1个处理心跳超时。两个都让它永远不停地运行。(即使我现在不是Leader,也可以运行心跳go程,只要超时的时候判断一下当前state就行了。)
  • 超时发生的时候直接在本go程内处理Figure2右下角Rules for Servers那些事。当然要判断一下当前state是Follower、Candidate、Leader的哪一种,然后执行相应的逻辑。比如Follower和Candidate在选举超时发生时要开启新的一轮election。Leader在心跳超时发生时要向所有人发送心跳。

程序结构

  • 不需要用到通道(channel)!我看到github上很多人都用了channel,至少用一个来通知超时。还有人用channel来通知state改变。其实没必要。
  • 两个背景go程分别处理2种超时。为什么不合起来?因为超时发生后处理的逻辑不同,因为超时重置的时机不同,所以最好分开写。
  • 每个RPC都要实现接收和发送两个部分。比如RequestVote函数,就是该RPC的接受者部分。sendRequestVote函数实现发送者的逻辑。
  • 每个sendRequestVote、sendAppendEntries调用都要用go语句调用,让它们独立go程运行。这样才能同时向所有
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值