分布式系统:Raft(实验作业3A)

6.824 KVRaft Lab 3A

实验目的

  • 用上次实现的Raft,实现一个Fault-tolerant Key/Value Service
  • Lab 3A不用修改任何Raft代码!
  • 要实现Clerk和Server两个部分。
  • Clerk是提供给用户的library。用户通过它来使用我们的KV服务。它对用户隐藏了多服务器的细节——用户不用知道有几个服务器,哪个是Leader。Clerk会随机找一台服务器调用RPC,如果它不是Leader,Clerk会自动换一台服务器,直到找到Leader。如果命令提交失败,Clerk也会自动重试。
  • Server要实现2个RPC函数:Get()和PutAppend,以及一个运行在独立线程的applier loop。
  • 因为客户端会重试,所以服务器要实现去重。做法是,客户端每次请求加上一个客户端ID,以及请求的序列号。

RPC handler

  • 两个RPC handler:Get和PutAppend,做的事情差不多一样。调用raft的Start()函数,将Op放到log中。Start()会返回一个index。我们在一个map中登记,我们要等待这个Index。然后我们等待applier loop通知。
  • 等待通知可以用chan实现。kv结构体中应该有一个map[int]chan ApplyResult。让applier可以根据Index来查找chan。
  • 等待过程中要时不时检查Raft的term有没有改变。如果变了就说明我们不是Leader了。可以返回WrongLeader = true)
  • app
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值