0%

mit-6.824-Lab2(最后更新时间2020/12/13)

mit 6.824是一个很好的学习分布式的项目
Lab2 是一个raft项目。

相关资料

介绍

这是一系列实验中的第一个,你将在其中构建容错的键/值存储系统。在本实验中,你将实现Raft(复制状态机协议)。在下一个实验中,你将在Raft之上构建键/值服务。然后,你将在多个复制的状态机上“分片”服务,以提高性能。

复制服务通过将其状态(即数据)的完整副本存储在多个副本服务器上来实现容错功能。即使服务的某些服务器出现故障(崩溃,网络故障或不稳定),复制也可以使服务继续运行。挑战在于,故障可能导致副本持有不同的数据副本。


Raft将客户请求组织成一个序列,称为日志,并确保所有副本服务器看到相同的日志。每个副本都以日志顺序执行客户端请求,并将其应用于服务状态的本地副本。由于所有活动复本都看到相同的日志内容,因此它们都以相同的顺序执行相同的请求,因此继续具有相同的服务状态。如果服务器出现故障但后来又恢复了,Raft会确保其日志为最新状态。只要至少大多数服务器都处于活动状态并且可以相互通信,筏将继续运行。如果没有这样的多数,Raft将不会取得进展,但是一旦多数能够再次交流,它将从停下来的地方继续前进。


在本实验中,你将通过关联的方法将Raft实现为Go对象类型,该方法旨在用作更大服务中的模块。一组Raft实例与RPC相互通信以维护复制的日志。你的Raft界面将支持不定编号的命令序列,也称为日志条目。这些条目已用索引号编号。具有给定索引的日志条目最终将被提交。届时,你的Raft应该将日志条目发送到较大的服务,以便其执行。


你应该遵循扩展的Raft论文中的设计,尤其要注意图2。你将实现论文中的大部分内容,包括保存持久状态并在节点出现故障后重新读取它。你将不会实现集群成员资格更改(第6节)。你将在以后的实验中实现日志压缩/快照化(第7节)。


你可能会发现本指南很有用,以及有关锁定和并发结构的建议。从更广泛的角度来看,请查看Paxos,Chubby,Paxos Made Live,Spanner,Zookeeper,Harp,Viewstamped Replication和Bolosky等。


该实验分为三个部分。你必须在相应的截止日期之前提交每个零件。