0. 要求·
本次lab为raft的第一分部(PartA), 原文要求在这里
简述lab2A的要求为:
实现Raft中leader election和心跳,保证一个term内只有一个leader,并且leader可通过心跳保证其 leader 角色。 如果发生leader crash或者leader网络丢失,需要达到新leader自动take over旧leader。
所有修改均在 raft.go
文件内。
这里简述下raft目录下的其他文件的作用:
1 | . |
本次lab为raft的第一分部(PartA), 原文要求在这里
简述lab2A的要求为:
实现Raft中leader election和心跳,保证一个term内只有一个leader,并且leader可通过心跳保证其 leader 角色。 如果发生leader crash或者leader网络丢失,需要达到新leader自动take over旧leader。
所有修改均在 raft.go
文件内。
这里简述下raft目录下的其他文件的作用:
1 | . |
从这篇文章开始开一个新坑 – MIT-6824, 分布式系统。早就将这门课纳入了必学的课程规划中,因为从学习编程到现在,我所学过的东西都是单机的,对分布式颇感兴趣,而这门课也是和 CMU15445, MIT6828等知名课程的同级别课程,于是选中了本门课。
本次课程选用的是,MIT6824 Spring 2020。
杂谈golang: 由于本门课程的所有lab均采用golang实现,所以花了几天的时间学习了golang,还好之前对C、C++语言比较熟悉,golang学习起来比较轻松,在整个lab实现过程中,我发现我非常喜欢这门语言,在语言语法,语言工具链,调试工具等方面都做得非常好。唯一让我迷惑了一段时间的是go语言的包管理,虽然现在统一采用了module来管理,但是包括部分tutorial和mit6824的lab都没有基于最新的module来做,所以这需要花费时间来了解下go语言的包管理历史。
ok,废话不多说。本文主要是对lab1的一个实现记录与总结。
断更了3个月,终于忙完了毕设,现在开始补课。文本为 CMU15445 - Proj3 的题解 。Proj3 为QueryExecutor,要求实现多个 executors,从而达到以下操作:
所有的执行器,采用 iterator query processing model, 即所有的 executor 向外暴露一个 Next 接口,ExecutorEngine 通过调用 Next接口得到一条tuple, 这种 processing model 为 pipeline style processing。
详细要求如下:
总体来说,本实验难度比proj1高,比proj2低。
近期重学CMake,为后续的开发做点准备。遇到PUBLIC|PRIVATE和INTERFACE
三个关键字不是很理解,搜索了一些资料,最后发现这篇文章说得比较浅显易懂。
CMake: Public VS Private VS Interface
本文在他的基础上,加上了一些实际验证的例子。
至此,我们已经基本分析完整个leveldb,本文给出leveldb中的各组件的默认大小。
log 文件,由一系列的32kb物理块组成。
manifest 文件,目前来看未限制其大小,但是在系统Open时,有一次机会重新**(文件大小超过2M)**开辟一个新的manifest,并移除旧文件。这部分在ReuseManifest函数中有体现: