Midk9t's Blog

MIT 6.824 Lab3B笔记

Lab3B总结 3B的主要目标是给我们基于raft的kvserver增加快照支持,而底层raft的快照我们在2D已经实现了,这次lab的任务就是使用我们的raft底层功能作为支撑,让kvserver能够接受来此底层raft的snapshot install,以及能够在整个raft日志开始变得过大时发送自己状态机作为snapshot给底层raft(因为需要raft将其持久化,以便故障恢复后能发回给上层的kvserver),好让它丢弃之前的日志来自我瘦身。

MIT 6.824 Lab3A笔记

Lab3目标 在顺利完成整个lab2后,我们成功实现了一个基于raft的共享日志库,它是一个日志复制框架,可以把日志可靠地复制到不同节点中,从而实现对日志序列的高可用。在之前的lab2中我们讲到,共识算法的主要作用之一是在无需第三方”arbitrator”介入的前提下,实现一组节点对一组数据达成共识,这一特性使得应用raft的日志集群十分适合用来为分布式系统提供配置相关的数据,如当前leader是谁(leader选举),微服务的真实ip(服务注册发现)等,因为它自身就避免了单点故障,不会因网络分区而引入不正确性。

MIT 6.824 Lab2C+D笔记

2C——状态持久化(Persistence) lab 2C是lab 2四个子实验中最简单的了,就是需要学生把论文中提到的需要持久化的状态保存起来,在raft节点宕机恢复之后可以读取,具体来说,需要持久化的字段有:

MIT 6.824 Lab2B笔记

Lab 子任务 在lab 2B中,学生们需要实现raft的log replication,也就是raft作为共识算法所支撑的核心功能:它让各个节点可以在各种情况下都存储同一组系列日志,且对日志的顺序与内容达成共识。这样就可以保证对这组日志的高可用,在无需第三方协调的前提下,避免单点故障。

MIT 6.824 Lab2A笔记

前言 最近在学习Raft共识算法,为了更好的沉淀,本来就打算写点笔记,然而分布式算法本质上是一套系统间不同组件交互的规则集合,没有固定的输入和期望输出,一时间竟找不到一个合适的顺序和线索来系统地展开,那既然我是通过mit 6.824和它的lab作为主要学习材料的,那就按照Lab的顺序来记录吧。