实验环境

OS: Ubuntu 18.04
Editor: VSCode
语言: Go 1.13
实验代码版本: Mit 6.824 Spring 2018

笔记记录了一些思路和遇到的问题。

对Raft协议的一些疑问的解答

https://segmentfault.com/a/11...

Lab1

  1. P1: 编写map()和reduce()
  2. P2: 完成word count程序
  3. P3: 无差错的调度
  4. P4: 容错调度

Lab2

  1. Lab 2A: Raft选举
  2. Lab 2B: 日志复制
  3. Lab 2C: 持久化和不稳定的网络

好的设计是成功的一半. 起初,笔者一开始用了很多goroutine+buffer channel来完成状态切换,定时器重置等工作。此外还增加一些代码来收到信号时,主动关闭goroutine, 最终代码凌乱冗长。

后来参考了Mushroom的设计,使用状态机模式重构了代码,减少不必要的channel,select和goroutine,尽量使用普通函数去完成功能。

重构之后顺利通过Lab2A, Lab2B(100次全部通过)。
仔细阅读论文,发现自己对论文的理解还是很肤浅,没有faithfully follow the paper,有很多细节都没有实现到位。

于是一边阅读论文,一边参考Students guide来修改不正确的代码. Student's guide里面包含了很多学生们错误的实现,是很有帮助的参考资料。

Lab3

1.Lab3A: 基于Raft的KVServer


Tsukami
9 声望9 粉丝

语雀: [链接]


« 上一篇
MIT6.824-Lab1-P1
下一篇 »
MIT6.824-Lab2A