20230214 MIT6.824 2022 Lab4 ShardedKV

ShardedKV 介绍 有关 shardkv,其可以算是一个 multi-raft 的实现,只是缺少了物理节点的抽象概念。在实际的生产系统中,不同 raft 组的成员可能存在于一个物理节点上,...

2023-03-16 19:34 · 23 min · 11170 words · Reid

MIT6.824 2022 Lab3 RaftKV

介绍 在lab2的Raft函数库之上,搭建一个能够容错的key/value存储服务,需要提供强一致性保证。 强一致性介绍 对于单个请求,整个服务需...

2023-03-16 19:34 · 8 min · 3850 words · Reid

Raft Etcd 之 Linearizable Read

介绍 linearizable read 简单的说就是不返回 stale 数据,具体可以参考Strong consistency models Read Index 机制就是 Leader 在收到读请求时进行如下几步: 如果 Leader 在当前任期还没有提交过日志,先...

2023-03-16 19:34 · 3 min · 1100 words · Reid

MIT6.824 2022 Raft 为什么Raft协议不能提交之前任期的日志

如果允许提交之前任期的日志,将导致什么问题? 我们将论文中的上图展开: (a): S1 是leader,将黄色的日志2同步到了S2,然后S1崩溃。 (b): S5 在任期...

2023-03-16 19:34 · 6 min · 2706 words · Reid

Multi Raft

Mulit Raft Group 通过对 Raft 协议的描述我们知道:用户在对一组 Raft 系统进行更新操作时必须先经过 Leader,再由 Leader 同步给大多数 Follower。而在实际运用中...

2023-03-16 19:34 · 5 min · 2467 words · Reid

MIT6.824 2022 Raft Lab2C Log Compaction

介绍 对Raft Figure2 中需要持久化的字段进行保存。 完成persist()和readPersist()函数,编码方式参照注释 优化nextIndex[...

2023-03-16 19:34 · 3 min · 1309 words · Reid

MIT6.824 2022 Raft Lab2D Log Persistence

介绍 snapshot是状态机某一时刻的副本,具体格式依赖存储引擎的实现,比如说:B+树、LSM、哈希表等,6.824是实现一个键值数据库,所...

2023-03-16 19:34 · 6 min · 2536 words · Reid

MIT6.824 2022 Raft 0 介绍

前言 论文 博士论文 博士论文翻译 官网 动画展示 Students’ Guide to Raft (重要) MIT6.824 本篇是实验的前言, 先对论文里面提到的RPC做个大概的梳理和介绍。 Raft 原理可以参考这篇...

2023-03-16 19:34 · 11 min · 5011 words · Reid

MIT6.824 2022 Raft Lab2A Leader Election

介绍 查看Raft0 流程梳理 整体逻辑, 从 ticker goroutine 开始, 集群开始的时候,所有节点均为Follower, 它们依靠ticker()成为Candidate...

2023-03-16 19:34 · 6 min · 2691 words · Reid

MIT6.824 2022 Raft Lab2B Log Replication

流程梳理 相关的RPC 在Raft0 中已经介绍, 这里不再赘述。 启动的Goroutine: ticker 一个,用于监听 Election Timeout 或者Heartbeat Timeout applier 一个,监听...

2023-03-16 19:34 · 14 min · 6794 words · Reid