MIT6.824 lab1的收获和分享

基本过程

  • coordinator:mapping->reduceing->finish,主要是分发任务,任务确认,任务过期处理
  • worker:map生成intermediate file,reduce将intermediate file转化为output文件
  • 通过本地文件系统代替GFS实现

难点和卡住的地方

  1. 初入GO语言开发,很多API都不是很熟悉,特别是文件相关的API
    • 找文件:filePath.Glob是最佳的
    • 创建删除打开删除文件:os.xxx
    • 切片删除: a = a[:len-1]
    • 时间API的使用
      • Add()方法是会改变原来的时间的,而不是生成一个新的时间
      • 比对时间最好是用Sub()
    • RPC的使用,传出传入的参数的首字母必须大写
    • go中的日志不是很清楚,只是简单用fmt打日志
  2. 环境的搭建,起初想windows连接linux开发,发现太慢太累赘了,然后去虚拟机下了goland和git完成
  3. coordinator的数据结构设计的不是很好,进行了一次大重构(Map和Reduce两对队列转换为一对队列)
  4. worker的Reduce过程中的文件处理:必须在最后生成out put文件再删除中间文件
  5. 设计通过task-id来找寻中间文件,而不是通过收集文件名(我觉得合理,如果是复杂环境,就多加一个uuid即可)
  6. 初始时对race的提示不敏感,有信息都不去解决

收获

设计

  • Small batch

    • 一个大功能怎么拆分成多个可测的功能,特别是worker中map和reduce的分别测试
  • 逻辑根本没有经过设计,就进行上手

    • TEST fails,But why?能从失败中获取什么?来反馈你的设计和重新编码是很有必要的
  • 做Lab不应是忙头苍蝇到处乱撞,也是需要考虑设计的

编码

  • 数据结构的定义

    • 你要做什么?怎么做?用到什么数据结构来实现?
  • 怎么打日志?怎么更好的打桩?清楚地知道当前的任务状况?

    • 一步一步的完成好各个子功能,后序大功能才能更好地应对
  • 要沉住气,稳住心态,Lab就是这么酸爽的

最后

希望大伙都能看到它的到来


MIT6.824 lab1的收获和分享
https://dada404.github.io/2022/04/11/7_lab%20share/MIT-6-824-lab1/
作者
Reeda
发布于
2022年4月11日
许可协议