从MIT 6.824的登神长阶之路
文章平均质量分 94
学习Distributed System,记录一下这个艰难的过程
JehanRio
菊厂预备后端小花 | Started from the bottom
展开
-
MIT - 6.824 全课程 + Lab 博客总览
写这篇博客的原因呢,是因为我最近刚开始接触分布式这块的内容,也是刚开始学习大名鼎鼎的MIT-6.824。当然,今年2023年已经改名叫做6.5840了,但问题不大。这里贴出今年的课程表和网课地址,网课共有2个版本,一个20年,一个21年,20年是Morris教授,弹幕更多;21年是Frans教授,据说更好理解。2020 MIT 6.824 分布式系统MIT 6.824 2021 分布式系统 [中英文字幕]为什么要写博客呢?原创 2023-08-15 21:56:11 · 1637 阅读 · 0 评论 -
MIT 6.5840 Lab2D - log compaction of Raft
当你看到这的时候,我经历了崩溃,重构了代码。我发现我之前写的代码,居然会发生死锁!?我通过打印找了一晚上,发现最后会在上获取锁的时候失败,导致一直卡在那。我上网看到一位博主也是遇到了这个问题,他也是用的select,属于是同病相怜了。现在突然回顾起来,教授上课的时候就说不要用select或者timer,会发生意想不到的问题,我当时没有在意这句话,现在才发现怎么那么头铁啊。。。实在是debug不动了,进行代码重构的时候借鉴了这位博主的代码,然而还是会出一些问题,test并不稳定。原创 2023-08-15 18:51:39 · 638 阅读 · 0 评论 -
MIT 6.5840 Lab2C - persist of Raft
如果你的Lab2A和Lab2B完成的非常的好,那么Lab2C会非常轻松,因为只需要在所有需要持久化的部分进行调用即可。反之,找bug会非常痛苦。这一节感觉蛮简单的,算是提前完成了任务了。后面就剩下一个日志快照了,成功就在眼前。今天看到一段小作文,感觉非常符合我今天的心境,分享一下给大家,希望大家也能“追风赶月莫停留,平芜尽处是春山”。失之东隅,收之桑榆。人生海海,山山而川,不过尔尔。昨日之深渊,今日之潜谈。路虽远,行则将至,事虽难,做则可成。纵然,欲买桂花同载酒,终不似,少年游。原创 2023-08-12 19:31:21 · 488 阅读 · 0 评论 -
MIT 6.5840 Lab2B - log replication of Raft
这个LabB是我目前为止花时间最多的一个Lab,好吧,其实之前也就做了2个。这几天真的是茶饭不思,午休的时候也一直在想,晚上睡觉失眠也在想,健身也在想。一开始脑子混乱,到昨天晚上突然茅塞顿开,然后今天又花了一天肝了出来,激动之心难以言表。昨天还在感慨马上8月中旬了,我Lab2都还没做完一半,心里那个急啊,想着马上做完这个就得开始复习了,不过好在今天把这个给做出来了,据说Lab2c很简单(希望不要骗我了)。这个测试我也只跑了一遍,可能还有很多概率性错误,但我不想想了暂时,这几天真的累死了。原创 2023-08-11 21:43:23 · 663 阅读 · 0 评论 -
MIT 6.5840 Lab2A - leader election of Raft
第二个实验分为了4个部分,分别对应leader election领导选举、log日志、persistence持久性、log compaction日志压缩。后面的实验都是基于前面的基础的,所以第一个实验就需要把框架地基打牢。Raft 是一种通过日志复制来实现的一致性算法。在开始之前,需要先对Raft算法基本的一些流程搞清楚。我罗列了一些🔗,帮助你更好的学习Raft,当然,你也可以看我之前的笔记。论文Raft动画演示Raft可视化(你可以自己模拟发生的任意情况)Raft算法国际论文全翻译。原创 2023-08-08 14:40:40 · 951 阅读 · 2 评论 -
MIT 6.824 Lecture 5 - Fault Tolerance - Raft(2)
S3接收到后,检查自己log index11的位置为3,发现和S2说的一样,于是按照S2的log记录,在自己log index12的位置将term4改成term5,然后回复S2一条确定消息ok。S2向S3,发送heartbeat,携带信息(当前nextIndex指向的term,nextIndex-1的term值,nextIndex-1值),即(空,5,12)回答:是的,这里需要上层应用辅助一些Raft的工作,比如告知Raft我已经拥有i之前的快照了,可以对应的删除Raft在i状态之前的log了之类的。原创 2023-08-07 12:12:52 · 344 阅读 · 0 评论 -
MIT 6.824 Lecture 5 - Fault Tolerance - Raft(1)
这里我们重新概述一下Raft流程。首先这里我们用3台Raft机器,其中一台为leader,另外两台为follower。leader和follower都在storage维护着log,所有K/V的put/get操作都会被记录到log中。Client请求leader,假设是get请求leader将get操作记录到自己的log尾部leader将新的log条目发送给其他2个follower此时follower1成功将log条目追加到自己本地的log中,回应leader一个ack。原创 2023-08-05 16:32:42 · 388 阅读 · 0 评论 -
MIT 6.5840 Lab1 - MapReduce
2023年的叫做6.5840,名字改了,不过区别不大,直接用这个就行,大家还是习惯称呼他6.824。我是根据课程表来的,所以上完了前四节课就开始做实验了。下面就正式开始吧。原创 2023-08-04 22:28:29 · 2111 阅读 · 2 评论 -
MIT 6.824 Lecture 4 - 主/备复制(Primary/Backup Replication)
学习这门课之前先看下这篇博客,这是论文的解读,当然,这篇论文也是第四节课要求的论文。这篇论文是VMware发表,讲述的是实施的一个商业企业级系统,用于提供容错虚拟机。该系统基于通过另一台服务器上的备份虚拟机复制主虚拟机执行的方法。【分布式】(VM-FT论文解读)容错虚拟机分布式系统的设计。原创 2023-08-02 14:56:29 · 386 阅读 · 0 评论 -
MIT 6.824 Lecture 3 - GFS
Master查询filename到chunk handle映射关系的表,找到需要修改的chunk handle后,再查询chunk handle到chunk server数组映射关系的表,以list of chunk servers(primary、secondaries、version信息)作为Client请求的响应结果(减少Master的负担,不再和Master交互)(路由和负载均衡)。当然也可以有数据复制和数据缓存,但通过课上讲的,数据被被分成许多chunk分布在不同的服务器上,应该不是数据复制,原创 2023-08-01 13:09:35 · 399 阅读 · 0 评论 -
MIT 6.824 Lecture 2 - RPC and Threads
虽然这节课的title是RPC和Threads,但是并没有讲到PRC,我看的是2020版的,同学们的提问有点太多了,感觉有点偏题了都。加上我也还没学完GO,学起来真有点费劲,后面先把go的基本语法学了吧。然后后面应该会去看21年版本的了,据说讲的要好一些。更多的笔记后面再补。原创 2023-07-31 14:54:07 · 438 阅读 · 0 评论 -
MIT 6.824 Lecture 1 - Introduction
在经历了近乎两周的内耗焦虑后,我开启了新的篇章。我发现啊,减少内耗的最有效方法,就是让自己忙碌起来。前段时间的日子主要就是刷题+背面经,虽然有在做,但好像还是蛮闲的,u know,没有什么每天必须抓紧时间完成的硬性指标。于是,我就找了这样一个MIT的经典课程:6.824 分布式系统。早就听闻这门课的大名了,今天我也开启了这个篇章,也想来试一试。如果我没有见过太阳,我也许会忍受黑暗,可如今,太阳把我的寂寞照耀得更加荒凉。未来的路肯定会很坎坷,希望未来的你不要放弃。我在未来等你~原创 2023-07-27 12:24:19 · 561 阅读 · 2 评论