Lab 2C
实验2C要求实现Raft服务器currentTerm、votedFor和log三个状态的持久化,难度不高,只需要填充相应函数,并在每次回复RPC之前和这三个状态被修改之后调用持久化函数。
但实验2C的测试还是有可能因为2A、2B的实现不完善而发生错误。
我在测试时多次碰到该错误:
— FAIL: TestFigure8Unreliable2C (41.85s)
config.go:609: one(5768) failed to reach agreement
6.824为MIT的分布式系统课程。同TinyKV类似,6.824的主要内容也为实现Raft共识算法。以笔者做完Lab1的感受,相比TinyKV,6.824仅提供了基本框架,在测试用例当中并未对实现过程中所使用的数据结构进行具体要求,因此编程自由度较高。
MIT6.824分布式系统课程中文翻译 - 知乎 (zhihu.com)
如何的才能更好地学习 MIT6.824 分布式系统课程? - 知乎 (zhihu.com)
【MIT 6.824 Distributed Systems Spring 2020 分布式系统 中文翻译版合集】_哔哩哔哩_bilibili
Raft是一个用于管理replicated log的共识算法(consensus algorithm)。Raft与Paxos一样高效。相比Paxos,Raft更加易懂,且为应用到实际系统当中提供了更好的基础。为了提高可理解性,Raft将共识算法的几个关键元素分开,例如leader election、log replication和safety,并且它通过执行更强的一致性减少了需要考虑的状态数目。
共识算法能够让一群机器作为一个团结一致的群体运行,且能够容忍其中部分成员的失效。因此,共识算法在建立可靠的大规模软件系统当中发挥了重要作用。目前,几乎所有的共识算法都是基于Paxos,或受其影响的。但Paxos有两个缺点:
A Tour of Go的中文网页 https://tour.go-zh.org/ 提示隐私错误,无法访问,可安装本地版进行离线学习。
Downloads - The Go Programming Language (golang.org)
Prim算法用于求最小生成树,Dijkstra算法用于求单源最短路径。两者的用途不同,但算法实现非常类似,都采用了贪心算法,都是将顶点从一个集合加到另一个集合当中。但不同的是两者的选点标准:假设已加入的点集为U,未加入的点集为V。Prim算法在V中选取与U中任意顶点直接距离最短的那个顶点加入U,Dijkstra算法选取V中与初始顶点距离最短的那个顶点加入U。
我的电脑上装了很多奇奇怪怪的小工具,今天做一个总结,以供查阅。
官网:Access to Ext 2/3/4, HFS and ReiserFS from Windows| DiskInternals
免费版只支持保存文件,收费版能够mount to system。
官网:数据恢复软件,硬盘分区工具,系统备份软件 - DiskGenius官方网站
有一次帮朋友重装系统的时候不小心留了一片剩余空间,最后用这个工具合并的。
我的破本本用虚拟机跑Linux实在是顶不住,于是我昨天晚上一时兴起,想要给笔记本装 Windows 10 + Ubuntu 20.04 LTS 双系统。我的笔记本是UEFI引导,128GB SSD + 1TB机械硬盘,分区表格式都是GPT,Windows 10装在SSD上,计划在机械硬盘上分出128GB装Ubuntu(至于为什么才分这么点,显然是因为1T的硬盘几乎快被游戏填满了,逃)。
要么是我电脑的硬件兼容性太差,要么是我运气不佳,这次安装我居然步步踩坑,从昨天晚上折腾到今天晚上才把所有问题解决。这篇文章记录了我踩坑的全过程,仅供参考,切勿当作教程使用。
首先进行分区,我参考网上一篇教程,在SSD上划分出200M作为EFI引导分区,然后在机械硬盘上划分出128GiB空间作为Ubuntu主分区(注意:划分过程需要耐心等待,印象中花费了超过半个小时)。为了方便随后的安装过程中根据分区大小和位置找分区,我把分区结果拍了下来。