随笔分类
Lab1
去年中旬就知道有这门课了,那时一直忙着准备实习,以及入职后发现忙得一批,最近实习离职了,总算空出了时间,前段时间总算把 Lab1写出来了,与此同时论文 ddl,这段时间在疯狂刚论文,一期总算是搞完了,现在偷闲出时间总结下 Lab1。
Lab1主要任务就是要我们自己去构建一个 MapReduce FrameWork,FrameWork在启动时会启动若干副本,其中包含了 Coordinator节点以及众多 Worker节点,而我们要去做的便是去实现 Coordinator、Worker,设计二者的结构,Coordinator负责任务的分发,Worker负责去执行下发的任务,在实现时我们需要保证系统执行的可靠性,可以制定策略去减少任务执行的尾部延迟(下发的任务限定超时时间,超时了对任务状态进行重置,再下发给其它 Worker)。
笔者在设计实现了基于状态更变的方式对 Coordinator进行了优化,基于此只要对共享变量的转变进行控制,以及状态更变时懒汉式的方式来去通知下游 Worker需要去执行怎样的操作,出于性能的考虑,具体实现时很多处都去采用了基于 "Lazy-Load"的方式。Worker需要通过 Rpc的方式来去与 Master进行通信,这块实验我们仅需要去改动三个文件中的内容便可完成此 Lab:coordinator.go、worker.go、rpc.go。
值得提的一点,在保障可靠性方面 Coordinator我并没有去维护 Worker的状态,即实现了 Coordinator协调者的 Worker-statless,但有一点不太满意,就是在代码中存在部分 mutex来进行并发控制,后续有空时想通过 Go的 Channel来去实现代码中的无锁话,优化下代码。
最后我也来强调一点,正如课上所强调的,Lab需要独立实现,Cheaping is a shameful act!
欢迎各位在 Lab1中有其它设计思想的同学和我联系,相互交流共同成长!
最后感慨一句:时间过得可真快呀,转眼间,自己也要毕业了,不过也因此空余出了些时间,希望在毕业前完成这些 lab吧,成为一名真正的 cs coder,毕竟只要一身武艺在身,在哪不是混!