事件驱动的HotStuff协议

2020-09-30
阅读 4 分钟
3.3k
basic hotstuff中leader提出的一个proposal需要距离如下阶段才能提交执行: Prepare -> PreCommit -> Commit -> Decide, 每个阶段的作用:

Vscode中Go tools更新失败的解决方法

2020-04-26
阅读 1 分钟
7.2k
网上提供了一些解决方法:到github上下载tools包,再手动安装。但是笔者今天按照这个方法尝试,发现依然失败。浪费了很多时间终于找到一个方法.

Raft协议中的疑问和解答

2020-03-12
阅读 3 分钟
2.8k
相比于其他协议中先选举再补上日志的做法,raft则限制只有具有全部已提交的日志的candidate才可能赢得选举。具体做法是follower先检查最后一个日志的term,谁更大谁就更新; 如果一样,那么比谁更长。首先,谁最后的日志的Term更大,意味着该节点的逻辑时间更长,可能更新。其次最后一条日志的Term更大。

MIT6.824实验-Lab3A

2020-02-11
阅读 5 分钟
3.5k
实验内容 server.go: 添加Op 结构, 其描述了一个Get\Put\Append操作和值 client.go: 使用.Start(), 完善Put(), Append(), Get()等rpc handler. Hint 调用Start()后,应该等待raft达成aggrement. kvserver和raft的applyer容易形成死锁 要格外注意, leader在提交log之前失去了leadership, 这可能被network-parition,crash...

MIT6.824-Lab2C

2020-01-20
阅读 4 分钟
6.4k
2C中节点随时可能crash, 所以我们要利用Persisiter来持久化一些数据: log[], currentTerm, votedFor, 主要通过完善.readPersisit()和.persisit()方法, 这个在代码注释用有教程了。在rf.Make()立刻恢复crash前的状态,随后变为FOLLOWER。2C模拟了一个不稳定的网络,rpc调用者和处理者都要考虑rpc乱序,丢失,重复,延迟...

MIT6.824-Lab2B

2019-11-26
阅读 1 分钟
4k
Lab2B需要我们完善rf.Start(..)这个函数.这个函数接受一条command作为入参,如果当前节点rf是leader, 那么就会开始达成共识的过程.

MIT6.824-Lab2A

2019-11-03
阅读 4 分钟
4k
Lab2A Lab2A的地址:[链接] Lab2A需要完成Raft协议中的Leader Election部分。按照论文Figure2实现如下功能: 初始选举 Candidate发布RequestVote rpc Leader发布AppendEntry rpc, 包括心跳 server的状态转换(Follower, Candidate, Leader) 实验提示: 为raft.go添加必须的状态。 定义log entry的结构。 填充RequestVoteAr...

MIT6.824实验一览

2019-10-01
阅读 1 分钟
5.7k
OS: Ubuntu 18.04Editor: VSCode语言: Go 1.13实验代码版本: Mit 6.824 Spring 2018

MIT6.824-Lab1-P1

2019-10-01
阅读 1 分钟
2.5k
Part I: Map/Reduce input and output 完善如下函数: common_map.go: doMap() common_reduce.go: doReduce() 完成后测试: {代码...} 我们需要事先掌握如下: 保存读取json文件 文件输入输出. defer语句, 用于释放资源. common_map.go: doMap() 要干什么? doMap()管理一个Map Task. 调用mapF()将输入文件的内容变成一个[]K...

MIT6.824-Lab1-P2

2019-10-01
阅读 1 分钟
1.5k
A word is any contiguous sequence of letters, as determined by unicode.IsLetter.

MIT6.824-Lab1-P3

2019-10-01
阅读 1 分钟
1.6k
前面的都是串行执行MRTask, 这次我们要用多线程模拟分布式环境, 来进行分布式MR.具体的任务是: 完善schedule.go: schedule():

MIT6.824-Lab1-P4

2019-10-01
阅读 2 分钟
2.2k
master通过调用common_rpc.go: call()来分配任务.当超时发生, 该函数 返回false, 这时候master要把该任务重新分配给另一个worker.