月度归档: 2021年9月

6 篇文章

MIT 6.824 Lab3 KV Raft (2)
partB代码地址:[partB],参考了很多这位大佬的实现:这里 基本的过程 本节的主要内容就是在kv中再加上snapshot的内容。不是特别的难,只要按部就班的使用lab2中完成的几个raft快照功能就好。在lab的实验中,要考虑的两个主要问题就是: 什么时候去创建一个快照 在快照中要保存的东西有哪些 第一个问题: 测试脚本在创建一个kvser…
MIT 6.824 Lab3 KV Raft (1)
在上一个lab中,将raft的基本的内容都完成了。接下来这节,就是以raft为基础,来实现一个kv的数据库。part A部分还是比较简单的,不需要处理快照。只需要处理在RPC调用中出现的问题,比如说rpc丢失,调用超时等情况。具体的就到后面的代码还会有说到。 在正式开始前,要了解论文中section 7和8的内容,不然会有些不知所以然。代码实现在:…
MIT 6.824 Lab2 Raft (4)
写在前面,part D快照这部分没有完全通过,看debug 日志十分痛苦,所以就用了别人的raft直接快进到 lab3。如果以后有时间了再重新来看吧,目前这篇只是想记录下,part D最基本的测试点怎么过,以及理解part D中多出来的几个函数调用之间的关系。 我自己的partD实现在这里,不过有bug。别人的代码就暂时不贴了,未经别人同意。 函数…
MIT 6.824 Lab2 Raft (3)
在part A和part B当中,基本的将raft的东西都完成了。part C主要做的就是持久化的内容,也就是要将raft的一些状态信息保存下来,另外part C的测试脚本会模拟极端混乱的网络情况,并且会运行1000次,所以要对前面的代码做一个优化,不然无法通过part C。总的来说,part C要增加的代码不多,主要是持久化raft状态,以及一些…
MIT 6.824 Lab2 Raft (2)
Log Replication 基本的leader选举还是比较简单的,对于日志备份相比来说就是困难很多了。涉及到一些选举的优化,日志丢失的处理,以及一些现实中会出现的情况,比如说很多log entry丢失,导致log entry不能commit,leader掉线的日志的处理等内容。 我的2B代码中只是提供了最简单的实现,还有一些优化的空间,在2B中…
MIT 6.824 Lab2 Raft (1)
本文主要解释6.824中 lab2 Raft的part A和Part B部分。源代码链接:2A的代码,2B的代码 在这里,我不想讲述论文中的细节问题,只关注于如何实现代码,以及在编码的过程中可能需要考虑到的一些情况。 Leader Selection part A就是解决最简单的选举问题。所以对于论文中的figure 2中很多变量都是暂时不需要的。…