mit6.824 raft系列1

mit6.824的课程链接:https://pdos.csail.mit.edu/6.824/schedule.html
mit6.824怎么用的,在此不多做阐述,随便搜一下就有很多

raft协议

raft官网:https://raft.github.io/
论文链接:https://pdos.csail.mit.edu/6.824/papers/raft-extended.pdf
论文翻译:https://zhuanlan.zhihu.com/p/524885008

raft协议是干什么的网上也有很多文章,我们也不多做阐述。在此之前,了解再多的理论也都是纸上谈兵,就算自己想实际操作一下,也没有一个可以测试和实际应用的场景。根据raft论文做出基础的功能不算难,难点在于在在raft允许过程中存在大量的并发,无法像写算法一样一点点debug找出问题,更难的是一些偶然出现的并发导致的问题,只能靠我们分析日志猜测问题的原因,改正过后还需要执行大量的测试,不再出现这个错误的时候,也只是有可能解决了我们的问题,完成基础功能知识这个lab的开始。

日志

前边说过这个lab存在大量的并发,我们不可能通过debug来找出问题,唯一的办法就是打印大量日志,当出现问题的时候,从这些日志中发现蛛丝马迹寻找bug。
常规的是使用fmt.Printf来打印我们需要的信息,慢慢的会发现只是这样,分析日志会很麻烦,我们可以使用一些日志库来让我们的日志变得更加容易阅读,这也是我一开始使用的方法,go的zap logger是个不错的选择,在日志中添加特定的关键字,让我们快速的知道这条日志代表什么意思,也可以根据这些关键字快速过滤出我们所需要的日志。不过,即使这样,当日志量非常大的时候,从日志中寻找问题依然很困难。无意中我发现了这个:https://blog.josejg.com/debugging-pretty
它提供的日志美化功能可以让我们快速的分析问题:
在这里插入图片描述
使用它:
它的功能分为两部分:1.输出日志 2.美化日志
美化日志脚本链接:https://gist.github.com/JJGO/e64c0e8aedb5d464b5f79d3b12197338
这是一个python脚本,需要依赖两个库: richtyper,使用pip安装即可

第一部分的输出日志其实就是前边提到的使用我们自己输出日志,不过我们要按照特定的格式来输出,以便使用这个脚本来美化日志。
在这里插入图片描述
这个红色圈出部分的前缀是必须的(时间,颜色,节点),脚本根据时间排序、颜色打印不同颜色日志、节点分栏。默认的是没有这些前缀的日志是不输出的。

这个https://github.com/silence934/6.824/blob/master/src/raft/PrettyDebug.go是我写的日志输出工具,对比它提供的代码我有一些改变,这块可以参考代码。

第二部分就是使用对日志的美化
python dslogs.py -c 3
后边的参数c代表节点数量
完整命令:VERBOSE=1 go test -run TestInitialElection2A|python3 dslogs.py -c 3
也可以从日志文件中读取:cat xxx|grep ‘xx’ |python3 dslogs.py -c 3

其他

后续我还会把整个raft lab流程都记录下来,我不建议你参考我的代码或者思路来完成你的lab。
当然像这节中的日志这些工具什么的可以参考,它不是lab的核心,只是方便我们开发。你应该自己参考论文进行思考、设计你的代码该怎么写,一开始肯定是有种无从下手的感觉,但是当你迈出第一步后,后续的就会容易很多。当你有新idea的时候,记得使用git创建一个新的分支来实现你的想法,这样在你发现你的思路有问题的时候可以快速回到之前的代码,不要花太多的时间来思考你的想法是不是可行的,实践是检验真理的唯一标准。当你有方案拿不定主意的时候,最好按照上述方法去自己实现一下,或者你实在不知道该怎么做,可以参考我的方法(我的也是我自己的想法,不代表是最好的方案),也可以给我留言共同探讨。
代码地址:https://github.com/silence934/6.824

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值