![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
6.824 distributed system
文章平均质量分 71
ethannotlazy
这个作者很懒,什么都没留下…
展开
-
6.824 Lab 4B: Sharded Key/Value Service
思路每个leader负责poll新的config,将一个config发到raft中,在applyCh收到该config后更新配置;leader依次poll下一个编号的config,并且只有在所有需要发送的shard已经被接收方接收、所有需要接收的shard已经收到后才会apply下一个config;接收shard、删除shard操作都需要写到raft日志中,让一个group里的majority都执行同样的操作;如果一个接收者5秒内没有接收一个shard(即发送AddShard RPC失败),则默认该原创 2021-09-11 20:36:46 · 482 阅读 · 0 评论 -
6.824 Lab 3B: Fault-tolerant Key/Value Service
简介一个长期运行的raft服务器会积累大量的日志,这些日志放在内存里将占用大量空间。为了压缩日志占用的空间,raft可以通过快照将当前kvserver的状态存储下来,并丢弃已经被apply的日志。思路日志压缩后,因为被包含在snapshot里的entry都被移除,entry的下标 ≠ entry index - 1,这时:entry下标 = entry index - lastIncludedIndex - 1或entry index = entry下标 + lastIncludedIndex原创 2021-08-27 12:32:14 · 724 阅读 · 0 评论 -
6.824 Lab 3A: Fault-tolerant Key/Value Service
简介lab3主要是用lab2实现的raft做一个容错的键值存储服务。lab3A主要是实现一个没有日志压缩功能的键值存储系统。理想情况下的kvraft思路首先实现一个不存在消息丢失情况下的解决方案。ClientClerk记录一个leaderId,每次发送RPC时从leaderId开始。需要不断重复发送RPC,直至请求成功。Server存储k/v的是一个简单的map[string]string;PutAppend、Get方法调用底层raft的Start方法并在对应的通道上等待消息;在serv原创 2021-08-22 15:04:39 · 845 阅读 · 0 评论 -
6.824 Lab 2: Raft
简介lab2主要是根据论文 In Search of an Understandable Consensus Algorithm (Extended Version) 做一个复制状态机(replicated state machine)并以此做一个有容错性的存储k/v的分布式系统。思路整个lab2分为ABC三个部分:lab2A主要完成leader election部分,从多个server中选举出一个leader,并让选出的leader周期性地发送心跳包给各follower;lab2B主要完成日志原创 2021-08-15 11:39:00 · 953 阅读 · 0 评论 -
6.824 Lab 1: MapReduce
lab源地址简介根据MapReduce Paper构造一个MapReduce系统。该系统主要包括master和worker。master主要负责分发任务、处理worker故障;worker主要负责根据map、reduce函数读写文件。思路任务分发:master将需要完成的任务放到通道中,让worker从通道中拿取任务,根据任务类型完成相应的操作。容错:master跟踪每个任务的完成情况,如果一个任务超过一定时间仍未完成,则重新发布该任务。完成情况判断:master直接判断当前目录的目标文件是否存原创 2021-07-31 14:15:38 · 392 阅读 · 0 评论