Advertisement

kvraft_with_snapshots_Lab3B

阅读量:

mit_6.824_2021_lab3B_kvraft_with_snapshots

Part B: Key/value service with snapshots

在完成 lab3A 的基础上,接下来增加了键值存储服务的快照功能,这部分代码量较少,主要涉及对 lab3A 以及 raft 模块的一些细节调整,使整体代码结构更加清晰易读。然而,在实现过程中发现了一个与 raft 初始化相关的错误,导致一时陷入停滞,不过这一问题的解决也进一步加深了对 persist 部分机制的理解。

实验内容概述

首先需要明确的是,当服务器重启后,会执行一次完整的Raft日志以恢复其原有状态。然而,Raft日志的长度不可能无限增长(这一点与lab2D相同);

为节省存储空间,可以借助Raft提供的Snapshot()方法以及lab2D中的CondInstallSnapshot机制;

在启动服务器时,需将maxraftstate参数传递给StartKVServer()函数。其中,maxraftstate用于定义持久化Raft状态所允许的最大字节数(包含raftState内容,但不包含快照数据)。通过将该参数与persister.Raftstatesize()进行对比,可判断是否达到限制;

一旦KV服务器发现持久化的Raft状态接

全部评论 (0)

还没有任何评论哟~